在python中读取终端不一样

在python中读取终端不一样,python,Python,我试图在我的服务器中获取ls所有python文件,但是每当我编写的输出应该是所有的.py文件时,我就会获取那里的每个文件,我做错了什么。 我在服务器终端中尝试了ls*.py,效果很好,但是在脚本不工作时可以直接使用“ls*.py”作为命令 import os from subprocess import PIPE,Popen #os.chdir("..") cmd=["ls","*.py"] try: p=Popen(cmd,stdout=PIPE,universal_newlines

我试图在我的服务器中获取
ls
所有python文件,但是每当我编写的输出应该是所有的.py文件时,我就会获取那里的每个文件,我做错了什么。 我在服务器终端中尝试了
ls*.py
,效果很好,但是在脚本不工作时

可以直接使用“ls*.py”作为命令

import os
from subprocess import PIPE,Popen
#os.chdir("..")
cmd=["ls","*.py"]

try:
    p=Popen(cmd,stdout=PIPE,universal_newlines=True,shell=True)
except Exception as e:
    print(f"Exception:\t{e}")
for line in p.stdout:
    print(line,end=" ")
p.stdout.close()
return_code=p.wait()

这不是一个解决方案,但是为什么您要使用
Popen
而不是
run
?这是可行的,但在文档中使用了列表元素来显示spaces@Piggydog当您使用
shell=True
时,命令将作为单个字符串提供给shell。如果您使用列表,它只是将第一个元素发送到shell。尽管文档中似乎没有提到这一点。
import os
from subprocess import PIPE,Popen
#os.chdir("..")
cmd=["ls *.py"]

try:
    p=Popen(cmd,stdout=PIPE,universal_newlines=True,shell=True)
except Exception as e:
    print(f"Exception:\t{e}")
for line in p.stdout:
    print(line,end=" ")
p.stdout.close()
return_code=p.wait()