簡體   English   中英

沒有子進程.Popen的此類文件或目錄,不是由字符串命令引起的

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM