2016-02-15 62 views
-1

我试图在python中将shell命令的结果写入文件。该命令是从变量中读取的。它的工作原理,只要我把命令直接进入喜欢这里的蟒蛇命令:在python的子进程中执行shell命令

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
subprocess.call(["cat", "/etc/passwd"], stdout=FIRST_OPEN) 

但只要我尝试读取一个变量的命令,它不工作了:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD='cat /etc/passwd' 
subprocess.call([FIRST_CMD], stdout=FIRST_OPEN) 

我该如何做?

回答

0

注意两个来源都不相同。或者你存储命令列表:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD=['cat', '/etc/passwd'] 
subprocess.call(FIRST_CMD, stdout=FIRST_OPEN) 

,或者你使用它之前分割你的命令:

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD='cat /etc/passwd' 
subprocess.call(FIRST_CMD.split(), stdout=FIRST_OPEN) 

就个人而言,我建议你第一个选项。

+0

感谢的第一个例子中的伟大工程。我是Python新手,不同的括号有点混乱。 – stka

0

当你说[FIRST_CMD],你正在创建一个如下所示的列表:["cat /etc/passwd"],而不是["cat", "/etc/passwd"]。要改变这种情况,你可以使用使用FIRST_CMD.split()而不是[FIRST_CMD]。您还可以将FIRST_CMD定义为["cat", "/etc/passwd"]

0

尝试定义一个数组,然后传递没有括号的数组名称。

您的代码将是

FIRST_OPEN=open(FIRST_TMP_FILE, 'w') 
FIRST_CMD=['cat', '/etc/passwd'] 
subprocess.call(FIRST_CMD, stdout=FIRST_OPEN)