如何使用脚本

时间:2015-06-26 14:17:58

标签: python xargs file-copying

我是python的新手,仍然处于基础学习的水平。最近我尝试编写一个脚本,根据输入文本文件中提供的数字生成新文件夹。创建这些文件夹后,我想同时将文件复制到所有这些文件夹中。我可以通过输入

来做到这一点
echo equil{1..x} | xargs -n 1 cp *.txt *
在终端

,它工作正常。这里x是我工作目录中的文件夹数。但我担心的是让它自动化,即从脚本中调用它,这样用户每次都不需要在终端中键入这一行。这就是我尝试这个的原因

sub2 = subprocess.call(['echo', 'equil{1..x}', '|', 'xargs', '-n', '1', 'cp', '*.txt *'])

任何人都可以指导我并告诉我错误。实际上我没有收到任何错误,而是打印这个

equil{1..x} | xargs -n 1 cp *.txt *
在执行剩余的脚本后,在终端中

2 个答案:

答案 0 :(得分:0)

我不认为你可以像管道那样使用subprocess.call()。有关如何使用管道的配方,请参阅

https://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

即。你可以在两个进程中使用subprocess.communicate()。

答案 1 :(得分:0)

如果要向/从子进程的stdin / stdout发送数据,则必须使用subprocess.Popen。并且您必须Popen每个可执行文件的子流程,例如在您的示例中,一个用于echo,一个用于xargs

文档中有一个示例:https://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

另一个:Call a shell command containing a 'pipe' from Python and capture STDOUT

但是,不是运行echo来生成某些行,而是可以直接将它们在python中写入进程 stdin