0

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

例子:

文件夹/文件名.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 文件中。

有人有什么想法吗?

4

2 回答 2

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额外参数是唯一不太清楚的部分:它将标准错误重定向到标准输出所在的位置。在此处查看有关最后一部分的更多信息。

于 2012-08-31T08:37:42.663 回答
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) 
于 2012-08-31T08:35:43.417 回答