我是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 *
在执行剩余的脚本后,在终端中。
答案 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 。