簡體   English   中英

從 python 腳本/shell 通過 popen 執行 python 模塊

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

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