タグ付けされた質問 「subprocess」

Pythonサブプロセスモジュールを使用すると、新しいプロセスを生成し、それらの入力/出力/エラーパイプに接続して、リターンコードを取得できます。Pythonでシェルコマンドまたは実行可能ファイルを実行するために使用します。

15
サブプロセスコマンドからのライブ出力
流体力学コードのドライバーとしてpythonスクリプトを使用しています。シミュレーションを実行するときが来たらsubprocess.Popen、コードを実行し、stdoutとstderrからの出力を収集してsubprocess.PIPE---次に、出力情報を印刷(およびログファイルに保存)して、エラーをチェックします。問題は、コードの進行状況がわからないことです。コマンドラインから直接実行すると、その反復、時間、次のタイムステップなどについての出力が得られます。 (ロギングとエラーチェックのために)出力を保存し、ライブストリーミング出力を生成する方法はありますか? 私のコードの関連セクション: ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) output, errors = ret_val.communicate() log_file.write(output) print output if( ret_val.returncode ): print "RUN failed\n\n%s\n\n" % (errors) success = False if( errors ): log_file.write("\n\n%s\n\n" % errors) もともと私はパイプをrun_command介しteeてパイプしていたため、コピーは直接ログファイルに送られ、ストリームは依然として端末に直接出力されていましたが、その方法では(私の知識に対して)エラーを格納できません。 編集: 一時的な解決策: ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() …

2
サブプロセスPopenと呼び出しの違いは何ですか(どのように使用できますか)?
Pythonから外部プログラムを呼び出したい。私はとの両方Popen()を使用call()しました。 2つの違いは何ですか? 私の具体的な目標は、Pythonから次のコマンドを実行することです。リダイレクトの仕組みがわかりません。 ./my_script.sh > output ドキュメンテーションを読み、それはcall()便利な機能またはショートカット機能であると言います。call()代わりにを使用することにより、電力が失われPopen()ますか?
178 python  subprocess  popen 

3
OSError:[Errno 2] DjangoでPythonサブプロセスを使用している間、そのようなファイルやディレクトリはありません
subprocess.call()次のエラーをスローするプログラムを実行して、Pythonコード内でシステムコールを実行しようとしています。 Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 私の実際のPythonコードは次のとおりです。 url = "/media/videos/3cf02324-43e5-4996-bbdf-6377df448ae4.mp4" real_path …

17
サブプロセスを使用してリアルタイム出力を取得する
操作の進行状況インジケーターを表示するコマンドラインプログラム(svnadmin verify)のラッパースクリプトを記述しようとしています。これには、ラップされたプログラムからの出力が出力されるとすぐに、その出力の各行を表示できる必要があります。 私はsubprocess.Popen、を使用してプログラムを実行し、を使用してstdout=PIPE、入ってくる各行を読み取り、それに応じて処理するだけだと考えました。しかし、次のコードを実行すると、出力がどこかにバッファリングされているように見え、1行から332行、次に333行から439行(出力の最後の行)の2つのチャンクとして表示されました。 from subprocess import Popen, PIPE, STDOUT p = Popen('svnadmin verify /var/svn/repos/config', stdout = PIPE, stderr = STDOUT, shell = True) for line in p.stdout: print line.replace('\n', '') サブプロセスに関するドキュメントを少し調べたところ、へのbufsizeパラメーターを見つけたPopenので、bufsizeを1(各行をバッファー)および0(バッファーなし)に設定してみましたが、どちらの値もラインの配信方法を変更するようには見えませんでした。 この時点でストローを把握し始めたので、次の出力ループを作成しました。 while True: try: print p.stdout.next().replace('\n', '') except StopIteration: break しかし同じ結果を得た。 サブプロセスを使用して実行されたプログラムの「リアルタイム」プログラム出力を取得することは可能ですか?Pythonには、上位互換性のある(でないexec*)オプションが他にありますか?
135 python  subprocess 

10
Pythonから外部コマンドを非同期に実行するにはどうすればよいですか?
Pythonスクリプトから非同期にシェルコマンドを実行する必要があります。これは、外部コマンドがオフになり、必要なことをすべて実行している間も、Pythonスクリプトを実行し続けたいことを意味します。 私はこの投稿を読みました: Pythonで外部コマンドを呼び出す それから私は外に出ていくつかのテストos.system()を行いました&が、コマンドの最後に使用するように提供されるジョブを実行するように見えるので、コマンドが戻るのを待つ必要はありません。これがそのようなことを達成するための適切な方法であるかどうか私は疑問に思っていますか?試してみましたcommands.call()が、外部コマンドでブロックされるため、うまくいきません。 os.system()これを使用することが望ましいか、他の方法を試すべきかどうかを教えてください。


3
サブプロセスpopen Pythonの使用方法
os.popenがsubprocess.popenに置き換えられているので、どのように変換するのか疑問に思いました os.popen('swfdump /tmp/filename.swf/ -d') subprocess.popen()へ 私は試した: subprocess.Popen("swfdump /tmp/filename.swf -d") subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable # containing /tmp/filename.swf しかし、私はこれを適切に書き出していないと思います。任意の助けいただければ幸いです。ありがとう
102 python  subprocess  popen 

8
ディレクトリを変更するサブプロセス
サブディレクトリ/スーパーディレクトリ内でスクリプトを実行したい(最初にこのサブ/スーパーディレクトリ内にいる必要があります)。subprocessサブディレクトリに入ることができません: tducin@localhost:~/Projekty/tests/ve$ python Python 2.7.4 (default, Sep 26 2013, 03:20:26) [GCC 4.7.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import subprocess >>> import os >>> os.getcwd() '/home/tducin/Projekty/tests/ve' >>> subprocess.call(['cd ..']) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/subprocess.py", line 524, …


4
Popen.communicate()が「hi」ではなくb「hi \ n」を返すのはなぜですか?
誰かが、私が望む結果「hi」の前に文字「b」があり、その後に改行が続く理由を説明できますか? 私が使用していますのPython 3.3を >>> import subprocess >>> print(subprocess.Popen("echo hi", shell=True, stdout=subprocess.PIPE).communicate()[0]) b'hi\n' この余分な「b」は、Python2.7で実行すると表示されません

2
サブプロセスの呼び出しをテキストファイルにパイプ処理するにはどうすればよいですか?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"]) さて、実行するスクリプトがあります。実行してこの行にヒットすると、run.shに印刷が含まれているため、印刷を開始します。 これをテキストファイルにパイプする方法も教えてください。(また、可能であれば印刷します)

13
サブプロセスからリアルタイムでstdoutをキャッチする
subprocess.Popen()Windowsでrsync.exeを実行し、Pythonでstdoutを出力したいと思います。 私のコードは機能しますが、ファイル転送が完了するまで進行状況をキャッチしません!各ファイルの進捗状況をリアルタイムで印刷したい。 Python 3.1を使用すると、IOの処理に優れていると聞いたので。 import subprocess, time, os, sys cmd = "rsync.exe -vaz -P source/ dest/" p, line = True, 'start' p = subprocess.Popen(cmd, shell=True, bufsize=64, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) for line in p.stdout: print(">>> " + str(line.rstrip())) p.stdout.flush()

7
subprocess.communicate()からストリーミング入力を読み取ります
私はPythonを使用subprocess.communicate()して、約1分間実行されるプロセスからstdoutを読み取ります。 そのプロセスの各行をstdoutストリーミング形式で印刷して、生成された出力を確認しながら、続行する前に終了するプロセスをブロックするにはどうすればよいですか? subprocess.communicate() 一度にすべての出力を提供するように見えます。

3
別のファイル/スクリプトをスレッド化または書き込むことなく、サブプロセスで関数を実行することは可能ですか?
import subprocess def my_function(x): return x + 100 output = subprocess.Popen(my_function, 1) #I would like to pass the function object and its arguments print output #desired output: 101 個別のスクリプトを使用してサブプロセスを開くことに関するドキュメントしか見つかりませんでした。関数オブジェクトを渡す方法や、関数コードを渡す簡単な方法を知っている人はいますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.