我正在创建一个程序,它将提取一个帐号列表,然后运行 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.txt
和 b.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/