繁体   English   中英

通过子进程运行脚本文件

[英]Running script file through subprocess

我正在尝试通过 Python 的子进程模块运行 Linux 脚本。 下面是子进程命令:

result = subprocess.run(['/dir/scripts/0_texts.sh'], shell=True)
print(result)

这是0_texts.sh脚本文件:

cd /dir/TXTs

pylanguagetool text_0.txt > comments_0.txt

subprocess 命令执行脚本文件,在正确的目录中写入一个新的comments_0.txt 但是,执行时出现错误。 comments_0.txt出现“input file is required”的错误,subprocess 结果返回returncode=2 当我直接在终端中运行pylanguagetool text_0.txt > comments_0.txt时,命令正确执行, comments_0.txt使用正确的输入文件text_0.txt

对我所缺少的有什么建议吗?

这里有一些歧义,因为每次调用0_texts.sh时运行哪个 shell 并不明显,以及它是否具有您期望的环境变量值,如PATH ,这可能会导致pylanguagetool在您调用时运行不同的副本它在命令行。

首先,我建议删除 subprocess.run 中的subprocess.run shell=True选项,它只涉及另一个可能不同的 shell 。 接下来,我会将subprocess.run(['/dir/scripts/0_texts.sh'])更改为 subprocess.run subprocess.run(['bash', '/dir/scripts/0_texts.sh']) (或您想要的任何一个 shell运行,可能是bashdash )以消除歧义源。 最后,您可以尝试在脚本中使用type pylanguagetool ,使用其完整路径调用pylanguagetool ,或从您的终端调用bash /dir/scripts/0_texts.sh以进一步调试情况。

一个更大的问题是,pyLanguageTool 是一个 Python 库,因此您几乎可以肯定直接从原始 Python 脚本调用它的函数会更好,而不是使用 shell 脚本作为中介。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM