【问题标题】:Passing arguments by running a python script to a jar通过运行 python 脚本向 jar 传递参数
【发布时间】:2021-10-31 23:20:42
【问题描述】:

我有一个简单的 Java 应用程序,它在运行时通过传递 2 个参数来进行加法。代码如下:

package test_python;

import java.util.concurrent.TimeUnit;


public class Test_python {

public int addition(int first, int second) {
return first + second;
}
public static void main(String[] args) {
    
Test_python a = new Test_python();
System.out.println(a.addition(Integer.parseInt(args[0]), Integer.parseInt(args[1])));

 

}

}

我有一个 python 脚本:

import subprocess
import sys


first_arg = subprocess.check_output([sys.argv])
second_arg = subprocess.check_output([sys.argv])
subprocess.call(['java', '-jar', 'test_python.jar ',first_arg,second_arg])

我想将两个参数(如 2 和 3)传递给 python 脚本,并将参数发送到 jar 并返回响应。我尝试时收到此错误:

Traceback (most recent call last):
File "C:\Certificat python\start-stop.py", line 5, in <module>
first_arg = subprocess.check_output([sys.argv])
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 
424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 
505, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 
951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 
1360, in _execute_child
args = list2cmdline(args)
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 
565, in list2cmdline
for arg in map(os.fsdecode, seq):
File "C:\Users\40723\AppData\Local\Programs\Python\Python39\lib\os.py", line 822, in 
fsdecode
filename = fspath(filename)  # Does type-checking of `filename`.
TypeError: expected str, bytes or os.PathLike object, not list

你能给我一个解决方案吗?

提前致谢

【问题讨论】:

  • 你能分享一下python脚本是如何被调用的命令吗?只是python script.py 2 3吗?还是./script.py 2 3?还是别的什么?
  • python script.py 2 3

标签: java python command-line-arguments


【解决方案1】:

错误的原因是因为sys.argv 已经是一个列表,例如["script.py", "2", "3"] 并且您将其包装在另一个列表中,从而使其成为 [["script.py", "2", "3"]]

first_arg = subprocess.check_output([sys.argv])

删除外部列表包装器并删除作为脚本本身的第一项将删除错误。

first_arg = subprocess.check_output(sys.argv[1:])

但我怀疑这就是您所需要的,因为subprocess.check_output 运行该命令,它没有得到您想要做的参数。

$ python script.py cat script.py  # <cat> is a linux command that prints the file
b'#!/usr/bin/env python\n\nimport subprocess\nimport sys\n\n\nresult = subprocess.check_output(sys.argv[1:])\nprint(result)\n'

如果您只想获取第一个和第二个参数的值,例如23 如果调用为 python script.py 2 3,你可以这样做:

first_arg = sys.argv[1]
second_arg = sys.argv[2]

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-03-03
    相关资源
    最近更新 更多