【问题标题】:Python 3 - Using subprocess module to execute java command line promptPython 3 - 使用 subprocess 模块执行 java 命令行提示符
【发布时间】:2015-06-02 14:43:15
【问题描述】:

我的计算机上有一个带有命令行 api 的 java 程序。如果在命令提示符下导航到相应的文件夹,我可以输入命令

java -cp p2.jar propokertools.cli.RunPQL

在命令提示符下进行各种扑克计算。我希望能够通过 Python 与这个程序进行交互。

我试过了:

p = subprocess.check_output(['java', '-cp', 'p2.jar propokertools.cli.RunPQL'], cwd='C:\\Program Files\\PPTOddsOracle\\ui_jar')

但得到这个错误:

文件“C:\Python34\lib\subprocess.py”,第 620 行,在 check_output 中 引发 CalledProcessError(retcode, process.args, output=output) subprocess.CalledProcessError: Command '['java', '-cp p2.jar propokertools.cli.RunPQL']' 返回非零退出状态 1

我决定不那么雄心勃勃,只是尝试弄清楚如何让 Python 返回我的 java 版本,但是

p = subprocess.check_output(['java', '-version'])

p = subprocess.Popen(["java", "-version"], stdout=subprocess.PIPE)
p.stdout.read()

两者都返回空字节字符串,所以我认为我做错了什么。任何帮助将不胜感激。

【问题讨论】:

  • java -version 写入标准错误,而不是标准输出。
  • Heyyy... subprocess.Popen(["java", "-version"], stderr=subprocess.PIPE).communicate() 确实返回了我的 Java 版本!谢谢!
  • 合并标准输出/标准错误:outtput = subprocess.check_output(['java', '-version'], stderr=subprocess.STDOUT)

标签: python command-line subprocess


【解决方案1】:

我想通了。我错过了需要将“p2.jar propokertools.cli.RunPQL”拆分为单独的参数。

p = subprocess.check_output(['java', '-cp', 'p2.jar', 'propokertools.cli.RunPQL'], cwd='C:\\Program Files\\PPTOddsOracle\\ui_jar')

【讨论】:

  • 我发现如果您有shell=False(默认值),您需要在列表中使用单独的参数。
  • 你是对的。这也有效: subprocess.check_output('java -cp p2.jar propokertools.cli.RunPQL', cwd='C:\\Program Files\\PPTOddsOracle\\ui_jar',shell=False)
  • @cdarke:你在 Windows 上不需要它。虽然你可以这样做是为了便携。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2020-05-05
  • 2014-06-02
  • 2023-04-05
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
相关资源
最近更新 更多