Osモジュールとサブプロセスモジュールを通じてシェルコマンドを実行する方法を学んでいます。以下は私のコードです。
from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email')
import os
os.system('/usr/lib/mailman/bin/find_member -w user_email')
2つ目は非常にうまく機能しますが、1つ目は機能せず、次のエラーが発生しました。
Traceback (most recent call last):
File "fabfile.py", line 6, in <module>
call('/usr/lib/mailman/bin/find_member -w user_email')
File "/usr/lib64/python2.6/subprocess.py", line 478, in call
p = Popen(*popenargs, **kwargs)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
これら2つの方法は同じ効果があると思いました。ここで考えられるエラーは何ですか?どうもありがとう。
2つの間の1つの違いは文書化されています( ここ )
os.system(コマンド)
サブシェルでコマンド(文字列)を実行します。
一方、 subprocess.call()
は次のようになります。
subprocess.call(args、*、stdin = None、stdout = None、stderr = None、Shell = False)
Argsで記述されたコマンドを実行します。コマンドが完了するのを待ってから、returncode属性を返します。
subprocess.call()
をos.system()
と同じように動作させるには、Shell=True
を渡す必要があります。だから次のようなもの:
from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email', Shell=True)