2

我需要从 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。我无法弄清楚我做错了什么。谢谢你的帮助弗雷德

4

2 回答 2

1

假设您的意思是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)

于 2021-04-02T09:35:39.030 回答
1

您可以使用包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 包的作者。

于 2021-04-02T09:53:09.817 回答