繁体   English   中英

将变量用作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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM