python - 子进程命令未使用 ls 命令查找文件?

标签 python subprocess python-2.6

我正在创建一个程序,它将提取一个帐号列表,然后运行 ​​ls -lh 命令为每个帐号查找一个文件。当我在没有 Python 的情况下在我们的 Linux 服务器上运行我的命令时,它可以毫无问题地提取文件,但是当我通过 Python 执行它时,它说找不到它们。

import subprocess as sp
sp.call(['cd', input_dir])
for i, e in enumerate(piv_id_list):
    proc_out = sp.Popen(['ls', '-lh', '*CSV*APP*{0}.zip'.format(e)])
    proc_out_list.append(proc_out)
    print(proc_out)

这是我通过 Python 解释器运行命令时的一些示例输出:

>>> ls: cannot access *CSV1000*APP*: No such file or directory

但是通过 Linux 同样的命令:

ls -lh *CSV*APP*

它返回应有的输出。

最佳答案

这是因为 shell 会用与模式匹配的现有文件替换通配符。例如,如果您有 a.txtb.txt,则 ls *.txt 将从 shell 扩展为 ls a.txt b.txt。使用您的命令,您实际上要求 ls 返回有关文件名中包含星号的文件的信息。如果要验证,请使用以下内容:

sp.Popen(['bash', '-c', 'ls', '-lh', '*CSV*APP*{0}.zip'.format(e)])

您还应该使用 os.chdir 来更改目录,因为 sp.call(['cd', input_dir]) 会更改新进程的当前目录您创建了而不是父级。

关于python - 子进程命令未使用 ls 命令查找文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754802/

相关文章:

python - Pandas 中的groupby对不同的列具有不同的功能

python - loadtxt 出现奇怪的 python 语法错误

在 rc.local 中启动时出现 python 脚本问题(没有名为 ... 的模块)

python - 从 python 调用 BCP 抛出超时异常,然后立即完成

python - 如何通过 subprocess.Popen Python 将多个 linux 命令作为参数序列运行

带有 stdout 重定向的 Python 子进程返回一个 int

python - Python 中的 XML 解析

python - Django 管理员 : Prefetch choices in list_editable

python - 如何防止我的 Python 应用程序在到达代码末尾时自动关闭?

python - python 的 Tkinter 中的 Windows 进度条