[英]Executing python module through popen from a python script/shell
我有一個由以下命令執行的 python 模塊:
python3 -m moduleName args
嘗試使用 subprocess.popen 從腳本執行它。
subprocess.Popen(command, shell=True, text=True, stdout=subprocess.PIPE)
根據子流程文檔,我們建議傳遞序列而不是字符串。 因此,當我嘗試將以下命令作為參數傳遞時
command = ['python3','-m','moduleName','args']
我最終得到了一個 python shell 而不是正在執行的模塊。 如果我將它作為字符串傳遞,則一切都會按預期進行。 我找不到這方面的文檔或參考資料。
有人可以幫助了解這種行為嗎? 使這項工作發揮作用的最佳方法是什么?
謝謝!
此行為是由shell=True
選項引起的。 當Popen
在 shell 模式下(在 POSIX 下)運行時,該命令會附加到 shell 命令后面的“-c”選項( subprocess.py
,Python 3.9 ):
args = [unix_shell, "-c"] + args
擴展參數列表時,“-c”(在您的情況下為“python3”)之后的第一個參數被視為“-c”的參數。 其他參數被解釋為unix_shell
命令的進一步參數。 例如, -m
激活 bash 中的作業控制,如bash 手冊中所述。
解決方案是要么
Popen
設置shell
選項,無論如何這是一個好主意,因為它在資源上更輕,並且避免了像您遇到的那樣的陷阱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.