使用Python在文件上运行Bash命令

时间:2012-08-31 08:30:13

标签: python python-2.7

所以我创建了一个脚本,需要遍历服务器上的所有文件并运行每个文件名后跟命令“ll”,然后获取该命令的输出并将其打印到txt文件。

示例:

folder / filename.txt ll

输出:SoMETHINGSomethingSomethingother - 将其发送到output.txt文件

folder / subfolder / 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文件中。

有人有什么想法吗?

2 个答案:

答案 0 :(得分: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中的标准操作符,用于将命令的标准输出重定向到文件中。最后的2>&1额外参数是唯一不那么明确的部分:它将标准错误重定向到标准输出所在的同一位置。详细了解最后一部分here

答案 1 :(得分: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)