![](/img/trans.png)
[英]passing special characters as arguments to subprocess in python (2.7.x)
[英]Using variables as arguments for a command called by subprocess in Python 2.7.x
我正在尝试创建一个基本函数,该函数将使用subprocess
模块中的call()
将文件名和参数传递给程序。 文件名和参数是变量。 当我使用call()
它接受变量,但被调用程序读取带有"
的字符串。
这是有问题的代码:
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
格式?
嗯,是。 这正是文档所说的。 创建并传递包含命令和所有参数的列表。
编辑 : 乔纳斯·维利奇 ( Jonas Wielicki )建议的解决方案是确保通常在shell语法中用空格分隔的每个单个字符串都作为单独的项目列出; 这样, call()
将正确读取它们。 shlex
是不必要的。
args = ["-fs", "1"]
call(['mednafen']+args+[rom])
我最初的(不太简洁的)解决方案: shlex.split()
接收我提供的变量/字符串,并将其转换为字符串文字列表,这进而导致被调用的命令正确解析它们,而不是将变量解释为字符串引号。 因此,不是像"-fs 0"
那样对待参数,而是像我最初想要的那样获得-fs 0
。
import shlex
call(shlex.split("mednafen "+args+" "+romname))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.