Popen 命令列表
List of commands with Popen
大家好,
我有三个命令用于 copy/paste 具有相似路径的文件夹。我使用这段代码:
from subprocess import Popen, PIPE
cmd_list = [
'cp -r /opt/some_folder_1/ /home/user_name/',
'cp -r /var/some_folder_2/ /home/user_name/',
'cp -r /etc/some_folder_3/ /home/user_name/',
]
copy_paste = Popen(
cmd_list,
shell = True,
stdin = PIPE,
stdout = PIPE,
stderr = PIPE
)
stdout, stderr = make_copy.communicate()
但是对于copy/paste三个文件夹,我应该三遍运行代码。
你能帮我解决这些问题吗?
谢谢!
做:
import subprocess
cmd_list = [
['cp', '-r', '/opt/some_folder_1/', '/home/user_name/'],
['cp', '-r', '/var/some_folder_2/', '/home/user_name/'],
['cp', '-r', '/etc/some_folder_3/', '/home/user_name/'],
]
for cmd in cmd_list:
res = subprocess.check_output(cmd)
# stdout and stderr are available at res.stdout and res.stderr
# An error is raised for non-zero return codes
将列表传递到 Popen
或任何其他子进程函数时,您无法在 cmd_list
中传递多个命令。预计列表中的第一项是您要 运行ning 的命令,其他所有内容都是该命令的参数。此限制有助于使您的代码更安全,尤其是在使用用户提供的输入时。
另一个选项是您可以使用双符号将所有内容连接到一个命令中。这样做时,如果一个命令失败,其余命令将不会 运行.
copy_paste = Popen(
' && '.join(cmd_list),
shell = True,
stdin = PIPE,
stdout = PIPE,
stderr = PIPE
)
大家好,
我有三个命令用于 copy/paste 具有相似路径的文件夹。我使用这段代码:
from subprocess import Popen, PIPE
cmd_list = [
'cp -r /opt/some_folder_1/ /home/user_name/',
'cp -r /var/some_folder_2/ /home/user_name/',
'cp -r /etc/some_folder_3/ /home/user_name/',
]
copy_paste = Popen(
cmd_list,
shell = True,
stdin = PIPE,
stdout = PIPE,
stderr = PIPE
)
stdout, stderr = make_copy.communicate()
但是对于copy/paste三个文件夹,我应该三遍运行代码。 你能帮我解决这些问题吗?
谢谢!
做:
import subprocess
cmd_list = [
['cp', '-r', '/opt/some_folder_1/', '/home/user_name/'],
['cp', '-r', '/var/some_folder_2/', '/home/user_name/'],
['cp', '-r', '/etc/some_folder_3/', '/home/user_name/'],
]
for cmd in cmd_list:
res = subprocess.check_output(cmd)
# stdout and stderr are available at res.stdout and res.stderr
# An error is raised for non-zero return codes
将列表传递到 Popen
或任何其他子进程函数时,您无法在 cmd_list
中传递多个命令。预计列表中的第一项是您要 运行ning 的命令,其他所有内容都是该命令的参数。此限制有助于使您的代码更安全,尤其是在使用用户提供的输入时。
另一个选项是您可以使用双符号将所有内容连接到一个命令中。这样做时,如果一个命令失败,其余命令将不会 运行.
copy_paste = Popen(
' && '.join(cmd_list),
shell = True,
stdin = PIPE,
stdout = PIPE,
stderr = PIPE
)