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

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


16
シェルコマンドを実行して出力をキャプチャする
シェルコマンドを実行してその出力を返す関数を書きたい エラーメッセージでも成功メッセージでもを文字列として。コマンドラインで取得したのと同じ結果を得たいだけです。 そのようなことをするコード例は何でしょうか? 例えば: def run_command(cmd): # ?????? print run_command('mysqladmin create test -uroot -pmysqladmin12') # Should output something like: # mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists'
908 python  shell  subprocess 

30
Pythonのsubprocess.PIPEでの非ブロッキング読み取り
サブプロセスモジュールを使用してサブプロセスを開始し、その出力ストリーム(stdout)に接続しています。stdoutで非ブロッキング読み取りを実行できるようにしたい。.readlineを非ブロック化する方法、または呼び出す前にストリームにデータがあるかどうかを確認する方法はあり.readlineますか?これを移植可能にするか、少なくともWindowsとLinuxで動作させたいです。 ここに私が今それを行う方法があります(利用.readline可能なデータがない場合はブロックしています): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()

29
タイムアウト付きの「サブプロセス」モジュールの使用
OverаэтотвопросестьответынаStack Overflowнарусском:Прерываниепроцессаизадержканаисполнение stdoutデータを返す任意のコマンドを実行するか、ゼロ以外の終了コードで例外を発生させるPython コードは次のとおりです。 proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate プロセスが終了するのを待つために使用されます: stdoutdata, stderrdata = proc.communicate() subprocessより多くの秒のX数よりもために実行中のプロセスを殺す能力- -モジュールがタイムアウトをサポートしていないので、communicate実行するように永遠にかかる場合があります。 WindowsおよびLinuxで実行するためのPythonプログラムにタイムアウトを実装する最も簡単な方法は何ですか?

11
shell = Trueで起動したPythonサブプロセスを終了する方法
次のコマンドでサブプロセスを起動しています。 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) しかし、私が使って殺そうとすると: p.terminate() または p.kill() コマンドはバックグラウンドで実行され続けるので、どうすれば実際にプロセスを終了できるのか疑問に思いました。 コマンドを次のように実行すると、 p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE) を発行すると、正常に終了しp.terminate()ます。

15
subprocess.Popen呼び出しの出力を文字列に格納します
私はPythonでシステムコールを作成し、Pythonプログラムで操作できる文字列に出力を保存しようとしています。 #!/usr/bin/python import subprocess p2 = subprocess.Popen("ntpq -p") 私はここにいくつかの提案を含むいくつかのことを試しました: subprocess.call()の出力の取得 しかし運がありません。
300 python  subprocess 

8
変更された環境でのPythonサブプロセス/ Popen
少し変更された環境で外部コマンドを実行することは非常に一般的なケースだと思います。それは私がそれをする傾向がある方法です: import subprocess, os my_env = os.environ my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"] subprocess.Popen(my_command, env=my_env) 私にはもっと良い方法があると直感しています。大丈夫ですか?
284 python  subprocess  popen 

5
Python 2.7でサブプロセスの出力を非表示にする方法
私はUbuntuでeSpeakを使用していて、メッセージを出力して話すPython 2.7スクリプトがあります。 import subprocess text = 'Hello World.' print text subprocess.call(['espeak', text]) eSpeakは目的のサウンドを生成しますが、いくつかのエラー(ALSA lib ...、ソケット接続なし)でシェルを乱雑にするため、以前に印刷されたものを簡単に読み取ることができません。終了コードは0です。 残念ながら、その冗長性をオフにする文書化されたオプションはないので、それを視覚的にのみ沈黙させ、オープンシェルをクリーンな状態に保ち、さらに対話する方法を探しています。 これどうやってするの?

11
(stdin引数を使用して)subprocess.Popenに文字列を渡すにはどうすればよいですか?
次の場合: import subprocess from cStringIO import StringIO subprocess.Popen(['grep','f'],stdout=subprocess.PIPE,stdin=StringIO('one\ntwo\nthree\nfour\nfive\nsix\n')).communicate()[0] 私は得る: Traceback (most recent call last): File "<stdin>", line 1, in ? File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 533, in __init__ (p2cread, p2cwrite, File "/build/toolchain/mac32/python-2.4.3/lib/python2.4/subprocess.py", line 830, in _get_handles p2cread = stdin.fileno() AttributeError: 'cStringIO.StringI' object has no attribute 'fileno' どうやら、cStringIO.StringIOオブジェクトは、subprocess.Popenに適合するファイルダックに十分近づきません。これを回避するにはどうすればよいですか?
280 python  subprocess  stdin 

5
サブプロセスでの「shell = True」の実際の意味
subprocessモジュールで別のプロセスを呼び出しています。しかし、質問があります。 次のコードでは: callProcess = subprocess.Popen(['ls', '-l'], shell=True) そして callProcess = subprocess.Popen(['ls', '-l']) # without shell どちらも機能します。ドキュメントを読んだ後、私はそれがshell=Trueシェルを介してコードを実行することを意味することを知った。つまり、不在の場合、プロセスは直接開始されます。 だから私は私の場合に何を好むべきですか-プロセスを実行してその出力を取得する必要があります。シェルの内部または外部から呼び出すことの利点は何ですか。
260 python  subprocess 


9
行ごとにサブプロセスstdoutを読み取る
私のpythonスクリプトはサブプロセスを使用して、非常にうるさいlinuxユーティリティを呼び出します。すべての出力をログファイルに保存し、その一部をユーザーに表示します。次の方法でうまくいくと思いましたが、ユーティリティが大量の出力を生成するまで、出力はアプリケーションに表示されません。 #fake_utility.py, just generates lots of output over time import time i = 0 while True: print hex(i)*512 i += 1 time.sleep(0.5) #filters output import subprocess proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE) for line in proc.stdout: #the real code does filtering here print "test:", line.rstrip() 私が本当に望んでいる動作は、フィルタースクリプトがサブプロセスから受け取った各行を出力することです。Sortaは何をするのかteeが好きですが、Pythonコードを使用しています。 何が欠けていますか?これは可能ですか? 更新: a sys.stdout.flush()がfake_utility.pyに追加された場合、コードはPython 3.1で望ましい動作をします。Python 2.6を使用しています。を使用proc.stdout.xreadlines()するとpy3kと同じように機能すると思いますが、そうではありません。 アップデート2: …
235 python  subprocess 

13
プロセスの実行中にサブプロセスの出力を常に出力する
Pythonスクリプトからプログラムを起動するには、次の方法を使用しています。 def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = process.communicate()[0] exitCode = process.returncode if (exitCode == 0): return output else: raise ProcessException(command, exitCode, output) したがって、のようなプロセスを起動するProcess.execute("mvn clean install")と、プログラムはプロセスが終了するまで待機し、その後初めてプログラムの完全な出力を取得します。終了するまでに時間がかかるプロセスを実行している場合、これは迷惑です。 ループなどで終了する前にプロセス出力をポーリングすることで、プログラムに1行ずつプロセス出力を書き込ませることができますか? ** [編集]すみません、この質問を投稿する前によく検索できませんでした。スレッディングが実際の鍵です。それを行う方法を示す例をここに見つけました:** スレッドからPython Subprocess.Popen
202 python  subprocess 

1
popenの作業ディレクトリを指定するにはどうすればよいですか
Pythonでコマンドの実行ディレクトリを指定する方法はありますsubprocess.Popen()か? 例えば: Popen('c:\mytool\tool.exe', workingdir='d:\test\local') 私のPythonスクリプトは C:\programs\python C:\mytool\tool.exeディレクトリで実行することは可能D:\test\localですか? サブプロセスの作業ディレクトリを設定するにはどうすればよいですか?
187 python  subprocess  popen 

5
Pythonサブプロセス通信メソッドを使用しているときに終了コードを取得するにはどうすればよいですか?
Pythonのsubprocessモジュールとcommunicate()メソッドを使用するときに終了コードを取得するにはどうすればよいですか? 関連コード: import subprocess as sp data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0] これを別の方法で行う必要がありますか?
186 python  subprocess 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.