私はこれを長年取り組んでおり、助けていただければ幸いです。Pythonのサブプロセスを経由してsshingした後で端末がハングアップする
私がここでやろうとしているのは、テストサーバーへのsshとcd ..と、そしてそのフォルダ内のディレクトリのリストをpythonで表示します。 "proc_stdout =" ステップで、この関数は常にハング何らかの理由で
( 'LS; CD .. 111 -p sshのユーザ@サーバー')
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
print "Test 1"
proc_stdout = process.communicate()[0].strip()
#proc_stdout= process.stdout.readlines() (Gives same outcome as communicate)
#proc_stdout= process.stdout.read() (Gives same outcome as communicate)
print "Test 2"
print proc_stdout
subprocess_cmd:このコードは、私の最高の試みであります。 "Test 2"を出力したり、ファイルのリストを返したりしません。私はsshコマンドを取り出してもうまく動作します。私は、端末で見ることを期待することは、このようなものであるが、その代わりに、端末がハングし、私はもうそれと対話することはできません。
dredbounds-computer: python file_name.py
Test 1
Test 2
FileA
FileB
FileC
アップデート: 私は、コードを修正し、そしてproc_stdout =プロセスを置きます。 stderr。 communicate()。
dredbounds-computer: python terminal_test.py
Test 1
Traceback (most recent call last):
File "file_name.py", line 26, in <module>
subprocess_cmd('ssh [email protected] -p 111;cd ..;ls')
File "terminal_test.py", line 21, in subprocess_cmd
proc_stdout= process.stderr. communicate()
AttributeError: 'NoneType' object has no attribute 'communicate'
は、誰もが、私はこのコード、またはそれを行うための別の方法を修正することができます方法を知っています:私は、ターミナルで次のエラーを取得しています、これを実行する
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
print "Test 1"
proc_stderr= process.stderr. communicate()
print "Test 2"
print proc_stderr
print "Test 3"
: ここに私の更新されたコードですもの。なぜこれが私にタイプ・エラーを与えないのか分かりません。私がsshコマンドをどのように呼び出すかに問題がありますか?私はターミナルで同じコマンドを手動で入力しました。そしてそれはディレクトリのリストを返すので、理論上はうまくいくはずです。何かアドバイス?
は、プロセスが終了するまで待機して通信(もしあなたが 'ssh'をやっているのなら、これはおそらく" exit "とタイプする) –
私は プロを使ってみましたc_stdout = process.stdout.readlines()およびproc_stdout = process.stdout.read()も同様です。同じ結果。 – dredbound
これは 'stderr'に書き込むことができます。 'communicate'はタプルを返します。サーバーに接続できない場合、stdoutには何も書き込まれていない可能性があります。 – cdarke