Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3循环子流程输出以搜索文件名_Python_Python 3.x_Subprocess - Fatal编程技术网

Python3循环子流程输出以搜索文件名

Python3循环子流程输出以搜索文件名,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我正在运行一个终端命令来列出一个目录,我想循环遍历返回的每一行并搜索一个特定的文件名,到目前为止我有这个 import subprocess for line in subprocess.check_output(['ls', '-l']): if "(myfile.txt)" in line: print("File Found") 但这只是输出列表,似乎没有搜索文件,任何人都可以给我举个例子?要输出目录的内容,我建议使用操作系统模块 import os con

我正在运行一个终端命令来列出一个目录,我想循环遍历返回的每一行并搜索一个特定的文件名,到目前为止我有这个

import subprocess

for line in subprocess.check_output(['ls', '-l']):
    if "(myfile.txt)" in line: 
        print("File Found")

但这只是输出列表,似乎没有搜索文件,任何人都可以给我举个例子?

要输出目录的内容,我建议使用操作系统模块

import os

content = os.listdir(os.getcwd())
然后你有一个可搜索的列表


但是您确定,您的文件名为(myfile.txt)?

您可以尝试传入编码
utf-8
并按
\n
拆分它

for line in subprocess.check_output(['ls', '-l'], encoding="utf-8").split("\n"):
    # print(line)
    if "myfile.txt" in line: 
         print("File Found")
与最初一样,
check\u output
返回字节,因此我们在这里传入编码。另外,由于您希望逐行搜索,我们使用
\n
将其拆分。(在Python 3上进行了测试。)

默认情况下,此函数将返回 以编码字节的形式显示数据。输出数据的实际编码可能是 取决于所调用的命令,因此将解码为文本 通常需要在应用程序级别进行处理

可以通过将universal_换行符设置为True来覆盖此行为 如上文在常用参数中所述。-引自


子进程中调用
ls
将返回一个
Bytes
对象。
因此,首先,您可能希望将返回的值转换为字符串。
然后用新行(“\n”)作为分隔符拆分
字符串。
之后,您可以迭代并在列表值中搜索您的针

import subprocess
# CALLING "subprocess.check_output(['ls', '-l']" RETURNS BYTES OBJECT...
# SO WE DECODE THE BYTES INTO STRING, FIRST
# AND THEN SPLIT AT THE NEW-LINE BOUNDARY TO CONVERT IT TO A LIST
for line in bytes.decode(subprocess.check_output(['ls', '-l'])).split(sep="\n"):
    # NOW WE CAN CHECK IF THE DESIRED FILE IS IN THE LINE
    if "(myfile.txt)" in line:
        print("File Found")

为什么不使用更可靠的工具,例如
os.listdir
glob

import glob

if glob.glob('myfile.txt'):
    print('File found')
else:
    print('File not found')

函数返回与通配符匹配的文件列表。在这种情况下,如果文件存在,您将拥有
['myfile.txt']
,如果文件不存在,您将拥有
[]

请在普通文本中添加一些信息,说明如何回答OP的问题。您的解释有点误导。我认为返回
Bytes
对象的不是
ls
函数,而是
check\u output
返回的。而且,
字节
对象是可编辑的。你可以试着重复一遍。@Tai感谢你指出:-)如果他有兴趣直接做这件事,那将是非常理想的。也许他只是在试验
子流程
模块。。。。然而,如果没有任何正当理由,您的解决方案将是最合适和最直接的。
import glob

if glob.glob('myfile.txt'):
    print('File found')
else:
    print('File not found')