亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python subprocess run 適用于單個字符串但不適用于字符串列表

python subprocess run 適用于單個字符串但不適用于字符串列表

呼如林 2023-06-20 13:45:15
我正在嘗試使用subprocess模塊中的run方法從我的 Python 腳本中使用命令行選項啟動命令行程序。我的命令被定義為指定程序和選項的字符串列表,如下所示(其中pheno_fp和construction_fp是代表我系統中文件路徑的字符串,exe是代表我正在運行的程序的文件路徑的字符串):    step1_cmd = [exe,                 "--step 1",                "--p " + pheno_fp,                "--b 1000",                "--o " + construction_fp + "dpw_leaveout"]不工作- 當我嘗試以下操作時,我要運行的程序已啟動,但我指定的命令被錯誤解釋,因為程序退出并顯示錯誤“使用 --o 標志指定輸出文件路徑”:    test1 = subprocess.run(step1_cmd)工作- 當我嘗試以下操作時,程序正確執行,這意味著所有參數都按預期解釋:    test1 = subprocess.run(" ".join(step1_cmd), shell=True)如果我正確理解了文檔,前一種方法是推薦的用法,但我不明白為什么它不起作用。我很確定它的格式與文檔中的示例相同,所以我有點難過。有任何想法嗎?
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

將每個參數與其值分開,如下所示:


step1_cmd = [exe, 

             "--step",

             "1",

             "--p",

             str(pheno_fp),  # if it isn't a string already

             "--b",

             "1000",

             "--o",

             str(construction_fp) + "dpw_leaveout"

]

因為在傳遞參數列表時,每個部分都用空格分隔,包括選項和它們的值


查看完整回答
反對 回復 2023-06-20
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

此行為的解釋在這里:

args 是所有調用所必需的,并且應該是一個字符串或一系列程序參數。通常首選提供一系列參數,因為它允許模塊處理任何需要的參數轉義和引用(例如,允許文件名中有空格)。

示例:序列

l?=?['ls',?'-l?tmp']

給出錯誤

subprocess.run(l)??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
ls:?illegal?option?--

這是因為subprocess(這是對 的調用Popen)正在嘗試運行ls "-l tmp" 。

定義參數序列的正確方法是將它們分開,以便正確引用它們

subprocess.run(['ls',?'-l',?'tmp'])



查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號