[英]How to run exe file from python?
我嘗試使用 os.system 庫從本地 python 項目中的特定路徑運行 exe(在后台)。 我設法更改了“cd”命令之類的文件夾,但我無法運行該文件。
這是針對在 Windows 64BIT、Python 3.5.3 上運行的 python 項目
file.exe 位於“程序”目錄中。
import os
os.system("cd C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")
錯誤:
{OSError}[WinError 193] %1 不是有效的 Win32 應用程序
我看到了關於這個問題的其他帖子,但我無法解決它。 有任何想法嗎?
問題是system
命令不起作用。 它“有效”,但在一個單獨的子進程中立即退出。 當前目錄不會傳播到調用進程(另外,由於您沒有檢查返回代碼,因此即使目錄不存在,該命令也不會失敗。請注意,它發生在這里,因為目錄名稱有其中有空格並且沒有被引用......)。
為此,您必須使用os.chdir
,但您甚至不需要它。
如果要在特定位置運行命令,只需傳遞命令的絕對路徑(並且由於它使用字符串文字,因此請始終使用r
前綴以避免某些\t
或\n
字符被解釋為特殊字符...... )。 例如,對於 python 3,如果命令行出現錯誤(但在 python 2 中可以...):
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \UXXXXXXXX escape
所以總是使用原始前綴。 以下是我將如何重寫:
current_dir = r"C:\Users\User\AppData\Windows\Start Menu\Programs"
subprocess.Popen(os.path.join(current_dir,"file.exe"))
如果你真的需要當前目錄和exe一樣,使用cwd
參數。 還要獲取Popen
的返回值,以便能夠等待/輪詢/殺死/無論什么並獲取命令退出代碼:
p = subprocess.Popen(os.path.join(current_dir,"file.exe"),cwd=current_dir)
# ...
return_code = p.wait()
作為旁注,請注意:
p = subprocess.Popen("file.exe",cwd=current_dir)
不起作用,即使file.exe
在current_dir
中(除非您設置shell=True
,但出於安全/可移植性原因,最好也避免這樣做)
請注意,出於很多(好的)原因,不推薦使用os.system
。 使用subprocess
模塊, always ,如果有參數,總是帶有參數列表(不是字符串),並盡可能避免shell=True
。
你能看看這是否有效
import os
# change the current directory
# to specified directory
os.chdir(r"C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")
問題解決了。 謝謝大家,問題是管理權限.. 以管理員身份啟動 pycharm。 就像我說的 - 我可以使用 os.listdir() 查看該文件,但是當我嘗試運行它時,錯誤開始彈出。 我認為主要問題是 os.system() 從 python 進程繼承當前權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.