簡體   English   中英

在python子進程check_output中使用絕對路徑的任何方法

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

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