subprocess.call的问题

时间:2009-09-08 08:42:11

标签: python subprocess

在我当前的工作目录中,我有dir ROOT /里面有一些文件。

我知道我可以执行cp -r ROOT/* /dst并且我没有问题。

但是如果我打开我的Python控制台并写下这个:

import subprocess
subprocess.call(['cp', '-r', 'ROOT/*', '/dst'])

它不起作用!

我有这个错误:cp: cannot stat ROOT/*: No such file or directory

你能帮助我吗?

4 个答案:

答案 0 :(得分:10)

在尝试做类似的事情时遇到了这个。

  

*不会扩展为文件名

完全。如果查看cp的手册页,可以使用任意数量的源参数调用它,并且可以使用-t开关轻松更改参数的顺序。

import glob
import subprocess
subprocess.call(['cp', '-rt', '/dst'] + glob.glob('ROOT/*'))

答案 1 :(得分:7)

尝试

subprocess.call('cp -r ROOT/* /dst', shell=True)

注意在这里使用单个字符串而不是数组。

或使用listdircopy

构建您自己的实施

答案 2 :(得分:4)

*不会扩展为文件名。这是shell的功能。在这里,您实际上想要复制名为*的文件。将subprocess.call()与参数shell=True一起使用。

答案 3 :(得分:0)

将命令作为列表而不是字符串+列表提供。

以下两个命令相同: -

First Command:-
test=subprocess.Popen(['rm','aa','bb'])

Second command:-
list1=['rm','aa','bb']
test=subprocess.Popen(list1)

因此,要复制多个文件,需要使用blob获取文件列表,然后将“cp”添加到列表前面,将目标添加到列表末尾,并将列表提供给subprocess.Popen()。

如: -

list1=blob.blob("*.py")
list1=['cp']+list1+['/home/rahul']
xx=subprocess.Popen(list1)

它将完成工作。