gpt4 book ai didi

python - 我已经将一个 bash 命令集成到我的 Python 代码中——如何让这个命令从 shell 获取输入?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:36 24 4
gpt4 key购买 nike

我在我的 Python 脚本中添加了一个 bash 命令 - 这个 bash 命令用于线性化输入文件(即,获取一个包含多行的文件,并将其合并为一行)。当我为命令手动写入文件名时它起作用(在本例中,输入文件称为 input.txt):

import subprocess

holder = subprocess.Popen('perl -ne "chomp;print;" input.txt', shell=True, stdout=subprocess.PIPE).stdout.read()

print(holder)

但是,我希望这个 bash 命令获取用户在命令行中指定的文件名,并将其线性化。

我已经尝试使用 %s 实现此目的:

import subprocess
import sys
import os

path = sys.argv[1]
file = open(path, 'r')
inp = file.read()

holder = subprocess.Popen('perl -ne "chomp;print;" %s' % inp, shell=True, stdout=subprocess.PIPE).stdout.read()

print(holder)

但是,当我尝试这样做时,shell 卡住并且没有显示任何输出,并且 bash $ 提示符没有显示,没有任何错误消息。

我想知道在这种情况下是否有一种有效的方法来添加用户输入,非常感谢任何帮助。

编辑:澄清一下,这是我在 shell 中输入的内容以运行第二个示例的程序:

$ python3 program.py input.txt

最佳答案

为什么不直接将输入路径提供给您的子流程,就像这样?我有点困惑为什么你想在 python 中使用 perl 但是这样做......

import subprocess
import sys
import os

path = sys.argv[1]

holder = subprocess.Popen('perl -ne "chomp;print;" %s' % path, shell=True, stdout=subprocess.PIPE).stdout.read()

print(holder)

使用此示例输入:

test.txt
i
i
i
i
i

程序会输出:

python linearize.py test.txt
b'iiiii'

关于python - 我已经将一个 bash 命令集成到我的 Python 代码中——如何让这个命令从 shell 获取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57458299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com