gpt4 book ai didi

python - 如何为需要文件名而不是变量的 python 子进程调用提供输入?

转载 作者:太空狗 更新时间:2023-10-30 02:49:17 26 4
gpt4 key购买 nike

我正在尝试在 python 中调用 shell 脚本 (segment.sh)。在控制台产生正确结果的语法是:

> ./segment.sh ctb file.txt utf-8 0

可以看出,这个 shell 脚本需要一个文本文件作为输入。我想做的是打开文件并在 python 中读取它的内容(以后最好从 HTML POST 表单中读取),然后以某种方式将包含内容的变量传递给 python 子进程打电话。

以下功能无效。但是如果我只提供一个文件名,例如:

Popen(["/bin/bash", "./segment.sh", "ctb", "file.txt", "utf-8", "0"])`

然后,它将起作用,但我想传递来自变量的输入。你能给我一些建议吗?

def pySegment(text):
op = subprocess.Popen(["/bin/bash", "./segment.sh", "ctb", "utf-8", "0"],
stdout = subprocess.PIPE,
stdin = subprocess.PIPE,
stderr = subprocess.STDOUT,
)
results = op.communicate(input=text)[0]
return results

if __name__ == "__main__":
filename = "./file.txt"
text = open(filename).read()
result = pySegment(text)
print result

最佳答案

我建议使用 named pipe :

import os, tempfile, shutil, subprocess

temp_dir = tempfile.mkdtemp()
filename = os.path.join(temp_dir, 'file.txt')
text = '<text>'
os.mkfifo(filename)

try:
subprocess.Popen(('segment.sh', 'ctf', filename, 'utf-8', '0'))
with open(filename, 'w') as f:
f.write(text)
finally:
shutil.rmtree(temp_dir)

命名管道将提供与文件相同的接口(interface),而无需真正根据需要创建该文件。

关于python - 如何为需要文件名而不是变量的 python 子进程调用提供输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029282/

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