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