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