Python 3循环遍历子进程输出以搜索文件名

时间:2018-01-07 14:13:17

标签: python python-3.x subprocess

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

public sealed class CurrentScope : INotifyWhenDisposed
{
    [ThreadStatic]
    private static CurrentScope currentScope;

    private CurrentScope()
    {
    }

    public static CurrentScope Instance => currentScope ?? (currentScope = new CurrentScope());

    public bool IsDisposed { get; private set; }

    public event EventHandler Disposed;

    public void Dispose()
    {
        this.IsDisposed = true;
        currentScope = null;
        if (this.Disposed != null)
        {
            this.Disposed(this, EventArgs.Empty);
        }
    }
}

但这只是输出列表并且似乎没有搜索文件,任何人都有一个他们可以指向我的例子吗?

5 个答案:

答案 0 :(得分:1)

您可以尝试传递编码pyautogui.typewrite并将其拆分为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_output分开。 (在Python 3上测试过。)

  

subprocess.check_output:... 默认情况下,此函数将返回   数据为编码字节。输出数据的实际编码可以   取决于被调用的命令,因此解码到文本将   通常需要在应用程序级别进行处理。

     

可以通过将universal_newlines设置为True来覆盖此行为   如上面在常用参数中所述。 - 引自https://docs.python.org/3/library/subprocess.html#subprocess.check_output

答案 1 :(得分:1)

ls内拨打subprocess会返回Bytes个对象 因此,首先,您可能希望将返回的值转换为String 然后将String与New-Line(“\ n”)分开作为分隔符 之后,您可以在List-Values中迭代并搜索您的Needle。

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")

答案 2 :(得分:1)

为什么不使用更可靠的内容,例如os.listdirglob

import glob

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

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

答案 3 :(得分:0)

import os
 def find(name):
    for root, dirs, files in os.walk('C:\\');
        if name in files:
            print(root,name)
            print("FINISH")
            input()

try:
    s=input("name:  ")
    find(s)
except:
    None

答案 4 :(得分:-1)

输出目录的内容,我推荐使用os模块。

import os

content = os.listdir(os.getcwd())

然后你有一个可搜索的列表。

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