1

Python 2.7を使用してバックグラウンドでシステムコマンドを実行したいのですが、これは私が持っているものです:

import commands
path = '/fioverify.fio'

cmd= "/usr/local/bin/fio" + path + " "+ " &"
print cmd
handle = commands.getstatusoutput(cmd)

これは失敗します。アンパサンドを削除する&と機能します。バックグラウンドでコマンド(/usr/local/bin/fio/fioverifypath)を実行する必要があります。

これを達成する方法についての指針はありますか?

4

4 に答える 4

2

使用しないでくださいcommands。推奨されておらず、実際には目的には役立ちません。subprocess代わりに使用してください。

fio = subprocess.Popen(["/usr/local/bin/fio", path])

fioプロセスと並行してコマンドを実行し、変数fioをプロセスのハンドルにバインドします。fio.wait()次に、プロセスが終了するのを待って、その戻りステータスを取得するために呼び出します。

于 2012-11-11T21:39:00.213 に答える
0

subprocessモジュールを使用subprocess.Popenすると、コマンドをサブプロセスとして (バックグラウンドで) 実行し、そのステータスを確認できます。

于 2012-11-11T21:37:48.353 に答える
0

Python 2.7 を使用してバックグラウンドでプロセスを実行する

commands.getstatusoutput(...)は、バックグラウンド プロセスを処理するほどスマートではありません。subprocess.Popenまたはを使用しますos.system

commands.getstatusoutputバックグラウンド プロセスで失敗する方法のエラーを再現します。

import commands
import subprocess

#This sleeps for 2 seconds, then stops, 
#commands.getstatus output handles sleep 2 in foreground okay
print(commands.getstatusoutput("sleep 2"))

#This sleeps for 2 seconds in background, this fails with error:
#sh: -c: line 0: syntax error near unexpected token `;'
print(commands.getstatusoutput("sleep 2 &"))

subprocess.Popen がバックグラウンド プロセスで成功する方法のデモ:

#subprocess handles the sleep 2 in foreground okay:
proc = subprocess.Popen(["sleep", "2"], stdout=subprocess.PIPE)
output = proc.communicate()[0]
print(output)

#alternate way subprocess handles the sleep 2 in foreground perfectly fine:
proc = subprocess.Popen(['/bin/sh', '-c', 'sleep 2'], stdout=subprocess.PIPE)
output = proc.communicate()[0]
print("we hung for 2 seconds in foreground, now we are done")
print(output)


#And subprocess handles the sleep 2 in background as well:
proc = subprocess.Popen(['/bin/sh', '-c', 'sleep 2'], stdout=subprocess.PIPE)
print("Broke out of the sleep 2, sleep 2 is in background now")
print("twiddling our thumbs while we wait.\n")
proc.wait()
print("Okay now sleep is done, resume shenanigans")
output = proc.communicate()[0]
print(output)

os.system がバックグラウンド プロセスを処理する方法のデモ:

import os
#sleep 2 in the foreground with os.system works as expected
os.system("sleep 2")

import os
#sleep 2 in the background with os.system works as expected
os.system("sleep 2 &")
print("breaks out immediately, sleep 2 continuing on in background")
于 2016-07-07T14:05:43.297 に答える
0

sh.pyを試すこともできます。バックグラウンド コマンドがサポートされています。

import sh

bin = sh.Command("/usr/local/bin/fio/fioverify.fio")
handle = bin(_bg=True)
# ... do other code ...
handle.wait()
于 2012-11-12T05:48:19.507 に答える