簡體   English   中英

如何從 python 運行 exe 文件?

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

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