printf '%s ' 在 bash 终端中有效,但在 python 子进程中无效

问题描述 投票:0回答:1

这个看起来很简单,所以我确信我只是错过了一个小细节。尽管如此,搜索还没有发现任何东西,而且我使用的命令在终端中逐字工作,所以我们在这里。

我需要列出一个包含数万个文件的目录中的所有文件。由于其大小,我发现

printf '%s\n' *.*
查询文件夹内容的速度比
ls
快得多。不过,与
ls
不同的是,我需要首先进入感兴趣的文件夹。没关系,我可以在终端中成功运行
cd path/to/folder & printf '%s\n' *.*

如果我尝试在 python 脚本中执行相同的操作,该命令不会返回任何内容。它没有错误,但没有返回任何内容。它的返回速度也非常快——当我在终端中运行命令时,在返回内容列表之前仍然需要大约一两秒的时间来解析。在子进程中运行命令几乎是瞬时的。

其他详情:

  • 运行 Sonoma 14.6.1 的 Macbook Pro
  • Python v3.8.6
  • 文件夹仅包含 .mp3 文件(除了我忽略的隐藏 Mac 文件)

这是我尝试过的示例:

cmd = ['cd', 'path/to/folder', '&', 'printf', "'%s\n'", '*.*']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
directory_contents = result.stdout.decode("utf-8")

...我尝试更改引号的使用,使用

Popen
communicate
代替
run
,使用 '&&' 代替 '&',添加
shell=True
等。如果我更改命令到一个简单的
ls path/to/folder
子进程命令工作正常,我收到一个文件名列表(最终)。我错过了什么?

python-3.x subprocess printf
1个回答
0
投票

cd 路径/到/文件夹可能不起作用。

未能在子进程中运行 cd ...chdir(...);一定有办法,但如果您同意,请在调用您的(较小的)子流程之前更改文件夹

#wd = os.getcwd()
chdir ('path/to/folder')
cmd = ["printf", "'%s\n'", "*.*"]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
directory_contents = result.stdout.decode("utf-8")
#chdir (wd)
© www.soinside.com 2019 - 2024. All rights reserved.