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

2024-09-29 21:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着调用一个shell脚本(段.sh)在python中。 在控制台生成正确结果的语法是:

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

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

以下功能不工作。但如果我只提供一个文件名,例如:

^{pr2}$

然后,它就可以工作了,但是我想传递一个变量的输入。你能给我一些建议吗?在

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

Tags: texttxt脚本内容shsegmentshellresults
1条回答
网友
1楼 · 发布于 2024-09-29 21:47:00

我建议使用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)

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

相关问题 更多 >

    热门问题