我需要从 Python 脚本运行以下命令行(在 Linux Ubuntu 中)并将结果存储到变量中
我正在使用以下代码
dir = 'labels.txt'
for dir in subdirs:
args = "tail -1 %s"%(dir)
output = subprocess.check_output(args, shell = True)
我有以下错误消息:No such file or directory。我无法弄清楚我做错了什么。谢谢你的帮助弗雷德
我需要从 Python 脚本运行以下命令行(在 Linux Ubuntu 中)并将结果存储到变量中
我正在使用以下代码
dir = 'labels.txt'
for dir in subdirs:
args = "tail -1 %s"%(dir)
output = subprocess.check_output(args, shell = True)
我有以下错误消息:No such file or directory。我无法弄清楚我做错了什么。谢谢你的帮助弗雷德
假设您的意思是subprocess.check_output,您提供的是相对目录。当您使用 运行命令时subprocess.check_output(args, shell=True),它会在您的主目录中执行 - /home/<username>/. 在那里,它试图访问dir可能不存在的文件。
如果你尝试在 shell 中运行相同的命令,你会得到这个输出
tail: cannot open '<filename>' for reading: No such file or directory
为了解决这个问题,我建议您在程序中使用绝对路径。一个例子如下
import os
import subprocess
directory_to_iterate_through = "/absolute/path/to/directory"
for file in os.listdir(directory_to_iterate_through):
filepath = os.path.join(directory_to_iterate_through, file)
args = "tail -1 %s" % (filepath)
output = subprocess.check_output(args, shell=True)
您可以使用包command_runner来处理 Unix 和 Windows 平台上的超时、编码等,并提供退出代码,以便您知道命令何时失败。
抓住它python -m pip install command_runner
与它一起使用
from command_runner import command_runner
all_output = []
file= 'labels.txt'
command = "tail -1 {}".format(file)
exit_code, output = command_runner(command, shell=True, timeout=30)
if exit_code == 0:
all_output.append(output)
print(all_output)
如果您碰巧需要遍历给定目录中的文件,您可以使用ofunctions.file_utils.
抓住它python -m pip install ofunctions.file_utils
像这样使用它:
from ofunctions.file_utils import get_files_recursive
files = get_files_recursive('/my/folder', ext_include_list='.txt')
for file in files:
exit_code, output = command_runner('tail -1 {}'.format(file), timeout=30)
if exit_code == 0:
print(output)
免责声明:我是 command_runner 包的作者。