繁体   English   中英

在Python subprocess.Popen函数中使用ls

[英]Using ls in Python subprocess.Popen function

proc = subprocess.Popen(['ls', '-v', self.localDbPath+'labris.urls.*'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if line != '':
        print line
    else:
        break

当使用上面的代码时,我得到错误提示:

ls: /var/lib/labrisDB/labris.urls.*: No such file or directory

但是,当我在shell中执行相同操作时,我没有得到任何错误:

ls -v /var/lib/labrisDB/labris.urls.*

同样,这也不会产生任何错误:

proc = subprocess.Popen(['ls', '-v', self.localDbPath], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if line != '':
        print line
    else:
        break

为什么第一个代码失败? 我想念什么?

您会收到错误消息,因为python 子进程无法像bash一样扩展*。

像这样更改代码:

from glob import glob
proc = subprocess.Popen(['ls', '-v'] + glob(self.localDbPath+'labris.urls.*'), stdout=subprocess.PIPE)

以下是有关python中的glob扩展和解决方案的更多信息: Python子进程中的Shell扩展

球形由外壳完成。 因此,当您在终端中运行ls *时,您的外壳实际上是在调用ls file1 file2 file3 ...

如果要执行类似的操作,则应查看glob模块,或仅通过shell运行命令:

proc = subprocess.Popen('ls -v ' + self.localDbPath + 'labris.urls.*',
                        shell=True,
                        stdout=subprocess.PIPE)

(如果选择后者,请务必阅读安全警告 !)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM