Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中执行shell命令';s子流程_Python_Python 3.x - Fatal编程技术网

在python中执行shell命令';s子流程

在python中执行shell命令';s子流程,python,python-3.x,Python,Python 3.x,我试图用python将shell命令的结果写入一个文件。该命令是从变量中读取的。只要我将命令直接放入python命令中,它就可以工作,如下所示: 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/

我试图用python将shell命令的结果写入一个文件。该命令是从变量中读取的。只要我将命令直接放入python命令中,它就可以工作,如下所示:

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)

我必须如何做到这一点?

请注意,这两个来源并不相同。或者将命令存储为列表:

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)

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

当您说
[first\u CMD]
时,您创建的列表如下所示:
[“cat/etc/passwd”]
,而不是
[“cat”,“/etc/passwd”]
。要改变这一点,可以使用
FIRST\u CMD.split()
而不是
[FIRST\u CMD]
。您还可以先将
定义为
[“cat”,“/etc/passwd”]

尝试定义数组,然后传递不带括号的数组名称

您的代码将被删除

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

考虑在子流程调用中使用
shell=True
选项(检查下面的文档)

那么你的例子是:

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

谢谢,第一个例子很好用。我是Python新手,不同的括号有点混乱。