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

使用Python在文件上运行Bash命令,python,python-2.7,Python,Python 2.7,因此,我正在创建一个脚本,它需要遍历服务器上的所有文件,运行每个文件名,后跟命令“ll”,然后获取该命令的输出并将其打印到txt文件中 例如: 文件夹/filename.txt ll 输出:somethingsomethingother-这将发送到output.txt文件 文件夹/子文件夹/filename3.txt ll 输出:somethingsomethingother-这将发送到output.txt文件 这就是我到目前为止所做的: import os with open("output

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

例如:

文件夹/filename.txt ll

输出:somethingsomethingother-这将发送到output.txt文件

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

输出:somethingsomethingother-这将发送到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”命令运行打印出来的文件名。到目前为止,这段代码将把该文件夹及其子文件夹中所有文件的名称写入myoutput.txt文件


有人有什么想法吗?

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

您的修订代码将是:-

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) 
使用操作系统():

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


说明:
os.system(command\u string)
将在系统中执行命令
command\u string
,就像您在终端中键入该命令一样。
操作符在Windows和Linux中是标准的,用于将命令的标准输出重定向到文件中。末尾的
2>&1
额外参数是唯一不太清楚的部分:它将标准错误重定向到标准输出的同一位置。查看关于最后一部分的更多信息。

检查
子流程
模块可能的重复。值得注意的是,在Perl中,您可以通过打开文件(例如
open(my$pipeline,“| command | command>file”);
)来写入管道,但Python不允许这样做。@Eliot。Python执行该功能。如果Python使用与Perl相同的语法,这会很奇怪,你不这么认为吗?@Paddy3118是的,我只是指出一些常识:)事实证明,我要到周四才能测试出来,但我想首先感谢你的回答。我相信这会奏效。也谢谢你的解释,这真的很有帮助。在周四检查后,我会让您知道它是否有效。我们应该将
os.system
调用替换为它们的
子进程
对应调用。因此,否决票。@user1636295:
子流程
os.system
更通用。然而,
os.system
并没有被弃用,所以使用它没有什么大问题,尽管Python文档建议[1]人们使用
子流程
。您可以用
子流程调用(m,shell=True)
[1]替换
操作系统(m)
行。对于这些情况,我更喜欢
system
,因为它不太冗长。[1]
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)