私はのpppプログラムによって呼び出されたPP30接続が確立されたときに実行されているPythonスクリプトを持っています。 Pythonスクリプトは、基本的には、コマンドラインプログラムを呼び出し、結果を解析し、それを返します:なぜPythonのsubprocess.check_outputが機能するには、shell = Trueが必要ですか?
import subprocess
result = subprocess.check_output(["fw_printenv", "serialnr"])
result = # some operation
return result
私は、コマンドライン(例えばpython script.py
)から手動でPythonスクリプトを実行すると、このコードは100%正常に動作しますが、それはdoesnのif-upからPPPによって実行されているときは全く動作しません。 subprocess.check_output
が呼び出されたときに例外が発生します:[Errno 2] No such file or directory: 'fw_printenv'
。
私は唯一の私は、コードを変更した場合、それは仕事を得ることができます:
result = subprocess.check_output("fw_printenv serialnr", shell=True)
なぜ?
シェルを使用すると、システムのPATH変数が使用されています。これは、最初のバージョンで実行可能ファイルが見つからない –