2012-08-31 37 views
0

因此,我创建的脚本需要遍历服务器上的所有文件,然后运行每个文件名,然后运行命令“ll”,然后将输出命令并将其打印到txt文件。对Python文件运行Bash命令

例如:

夹/ FILENAME.TXT LL

输出:SoMETHINGSomethingSomethingother - 这被发送到output.txt的文件

文件夹/子文件夹/ filename3.txt LL

输出:SoMETHINGSomethingSomethingother - 这是发送到output.txt文件

这是我到目前为止:

import os 

with open("output.txt", "w") as a: 
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'): 
     for filename in files: 
     f = os.path.join(filename) 
     m = f + ' ll' 

     a.write(str(m) + os.linesep) 

所以我想弄清楚现在是如何使打印出来的文件名与“ll”命令运行。到目前为止,此代码会将该文件夹及其子文件夹中的所有文件的名称写入到我的output.txt文件中。

有没有人有任何想法?

+0

检查'subprocess'模块http://docs.python.org/library/subprocess.html – avasal

+3

可能重复[从python运行shell命令并捕获输出](http://stackoverflow.com/questions/4760215/run-shell-command-from-python-and-capturing-the-output) –

+0

值得注意的是,在Perl中,你可以通过打开文件来写入流水线(例如'open(my $ pipeline,“| command | command > file“);'),但是Python不允许这样做。 –

回答

0

为了使用“ll”命令运行文件,您可以使用python中的subprocess模块。

你修改后的代码将是: -

import os 
import subprocess 
import shlex 

with open("output.txt", "w") as a: 
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'): 
     for filename in files: 
     f = os.path.join(filename) 
     m = f + ' ll' 

     cmd_args = shlex.split(m) 
     output = subprocess.check_output(cmd_args) 
     a.write(output + os.linesep) 
1

使用os.system()

import os 

with open("output.txt", "w") as a: 
    for path, subdirs, files in os.walk(r'C:\Users\user\Desktop\Test_Py'): 
     for filename in files: 
      f = os.path.join(filename) 
      m = f + ' ll > output.txt' 

      os.system(m) 

这将只发送标准输出到output.txt文件。如果您还想将错误消息发送到output.txt,请改为使用m = f + ' ll > output.txt 2>&1'

说明:os.system(command_string)将在您的系统中执行命令command_string,就像您将该命令键入终端一样。在Windows和Linux中,>操作符是标准的,可将标准输出从命令重定向到文件中。最后的另一个参数是唯一不太清楚的部分:它将标准错误重定向到标准输出所在的相同位置。查看更多关于这最后部分here

+0

事实证明,我无法测试这个问题,直到星期四,但我想先说声谢谢你的回答。我相信这会起作用。也谢谢你解释它的真正帮助。一旦我在星期四检查,我会让你知道它是否有效。 – Adilicious

+0

我们应该用他们的“子进程”对应来替换“os.system”调用。因此,downvote。 –

+0

为什么子过程更好? – Adilicious