[英]any way to use absolute path in python subprocess check_output
python的新手,我發現子進程的check_output在Windows上可以很好地運行,但似乎只運行Windows PATH env變量中的cmd。
我可以執行以下罰款:
import sys
from subprocess import check_output
cmd = check_output("ipconfig", shell=True)
print(cmd.decode(sys.stdout.encoding))
和ipconfig輸出顯示正常。
如果我嘗試不在路徑中運行特定命令並嘗試絕對路徑,則會出現錯誤。
import sys
from subprocess import check_output
cmd = check_output("c:\\test\\test.exe", shell=True)
print(cmd.decode(sys.stdout.encoding))
是否沒有辦法為check_output使用絕對路徑引用? 我沒有找到任何..
我什至嘗試更改到該目錄。
import sys
from subprocess import check_output
import os
os.chdir("c:\\test\\")
cmd = check_output("test.exe", shell=True)
print(cmd.decode(sys.stdout.encoding))
但我得到以下錯誤
File "C:\Python35\lib\subprocess.py", line 398, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'naviseccli.exe' returned non-zero exit status 1
Process finished with exit code 1
請閱讀有關CalledProcessError
的文檔。
您可以通過在try ... except
塊中捕獲此異常並使用異常實例的output
屬性來檢查output
。
try:
... ... # Running the command.
except CalledProcessError as cmderr:
print (cmderr.output) # Example of using the output.
這樣,您可以檢查失敗命令的退出狀態和輸出。 我不知道是什么觸發了確切的錯誤,但是使用絕對路徑的可能性不大。
Popen提供了一個'cwd'參數,它將在定義的目錄中執行:
import subprocess
cmd = subprocess.Popen('test.exe', stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd='C:/test', shell=True)
out, err = cmd.communicate()
print (out)
使用check_output:
subprocess.check_output('cd C:/windows && notepad.exe', shell=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.