![](/img/trans.png)
[英]Python subprocess.Popen() error (No such file or directory)
[英]No such file or directory with subprocess.Popen, not caused by string command
我正在運行對wav文件運行的Web服務,但是我不想只允許任何上傳,因此我首先使用以下代碼檢查上傳文件的持續時間:
os.chdir("/home/me/bin")
proc = subprocess.Popen(['duration',wav],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)
out, errors = proc.communicate()
time = int(float(out.strip()))
if time > MAX_TIME:
sys.exit(1)
這已經工作了好幾個月了,但是最近(在遷移之后,我應該添加)我收到以下錯誤:
Traceback (most recent call last):
File "/home/me/webservice.py", line 100, in <module>
proc = subprocess.Popen(['duration',wav],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)
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
該錯誤似乎主要是由於命令中使用字符串而不是列表引起的,但此處並非如此。 當我嘗試在單獨的腳本中重現此錯誤時,我做不到。
任何人都知道這可能是什么原因嗎?
沒有路徑的命令總是只在PATH
上查找。 您無法cd到目錄並讓subprocess
(或您的shell)找到該目錄中的命令而未指定至少一個相對路徑。 這是標准的命令查找行為。
如果要在當前工作目錄中運行命令,則必須指定./
路徑,以使其明確表示不使用PATH
搜索語義。
PATH
環境變量中的相對路徑也不是到處都支持。 加.
將PATH視為安全隱患,一些系統明確過濾掉了.
從PATH。 您必須已經從允許這樣做的系統遷移到了不允許的系統.
在PATH
。
該錯誤可能與您要饋送到Popen的可執行文件無關,而與隨后被調用且在新環境的PATH中找不到的另一個可執行文件有關。
這種確切的情況發生在我身上,問題是我沒有為正在調用的腳本安裝解釋器。 調試令人沮喪,因為錯誤消息沒有告訴您找不到哪個文件。
考慮在文件頂部執行以下操作,除非您出於其他原因而不必使用chdir
。
import os
cmd = os.path.expanduser('~/bin/duration')
if not os.path.isfile(cmd):
raise IOError("command '%s' not found" % cmd)
proc = subprocess.Popen([cmd,wav ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.