所以我创建了一个脚本,需要遍历服务器上的所有文件并运行每个文件名后跟命令“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文件中。
有人有什么想法吗?
答案 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)