在我当前的工作目录中,我有dir ROOT /里面有一些文件。
我知道我可以执行cp -r ROOT/* /dst
并且我没有问题。
但是如果我打开我的Python控制台并写下这个:
import subprocess
subprocess.call(['cp', '-r', 'ROOT/*', '/dst'])
它不起作用!
我有这个错误:cp: cannot stat ROOT/*: No such file or directory
你能帮助我吗?
答案 0 :(得分:10)
在尝试做类似的事情时遇到了这个。
*不会扩展为文件名
完全。如果查看cp
的手册页,可以使用任意数量的源参数调用它,并且可以使用-t
开关轻松更改参数的顺序。
import glob
import subprocess
subprocess.call(['cp', '-rt', '/dst'] + glob.glob('ROOT/*'))
答案 1 :(得分:7)
答案 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)
它将完成工作。