我試圖創建一個基本函數,該函數將call()
從subprocess
模塊傳遞給程序的文件名和參數。文件名和參數是變量。當我使用call()
時,它接受變量,但被調用程序讀取包含"
的字符串。將變量用作Python 2.7.x中子進程調用的命令的參數
這裏是有問題的代碼:
from subprocess import call
def mednafen():
print "Loading "+romname+"..."
call(["mednafen", args, romname])
print "Mednafen closed."
romname="kirby.zip"
args="-fs 1"
mednafen()
我預計這將執行
mednafen -fs 1 kirby.zip
而是它似乎解釋變量的字符串作爲本:
mednafen "-fs 1" "kirby.zip"
由於這個,mednafen無法運行,因爲它無法解析以開頭的參數。 如果我使用shell=True
,它的工作方式與預期的一樣,但該功能顯然非常不鼓勵,因爲它很容易被利用?
call("mednafen "+ args +" "+romname+"; exit", shell=True)
有沒有辦法做到這一點不使用shell=True
格式?
嘗試用str替換參數(args) – XZ6H
謝謝,我給了它一個去,但它似乎沒有任何效果。 call()仍然用引號解釋變量。 –
你的代碼實際上並沒有傳入參數,但我想我們可以猜出你的意思。 – tripleee