gpt4 book ai didi

java - 在python子进程中发送字符串作为参数

转载 作者:行者123 更新时间:2023-12-02 02:00:49 25 4
gpt4 key购买 nike

根据this我可以在Python中执行.bat文件。是否可以不仅执行.bat文件,还可以发送一个字符串作为参数,在Java程序中使用?

我现在拥有的:

Python 脚本:

import subprocess

filepath="C:/path/to/batch/myBatch.bat"
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE)

stdout, stderr = p.communicate()
print p.returncode # is 0 if success

Java 程序:

public static void main(String[] args) {
System.out.println("Hello world");
}

我想要什么:

Python 脚本:

import subprocess

parameter = "C:\\path\\to\\some\\file.txt"
filepath="C:/path/to/batch/myBatch.bat"
p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE, parameter)

stdout, stderr = p.communicate()
print p.returncode # is 0 if success

Java 程序:

public static void main(String[] args) {
System.out.println("Hello world");
System.out.println(args[1]); // prints 'C:\\path\\to\\some\\file.txt'
}

所以主要思想是将一个字符串从 python 作为参数发送到 java 程序并使用它。我尝试过的方法如下:

import os
import subprocess

filepath = "C:\\Path\\to\\file.bat"
p = subprocess.Popen(filepath, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
grep_stdout = p.communicate(input=b"os.path.abspath('.\\file.txt')")[0]
print(grep_stdout.decode())
print(p.returncode)
print(os.path.abspath(".\\file.txt"))

输出:

1
C:\\path\\to\\file.txt

1 表示出现问题。确实如此,因为 Java 程序看起来像这样:

public static void main(String[] args) throws IOException {
String s = args[1];
// write 's' to a file, to see the result
FileOutputStream outputStream = new FileOutputStream("C:\\path\\to\\output.txt");
byte[] strToBytes = s.getBytes();
outputStream.write(strToBytes);
outputStream.close();
}

在Python中执行file.bat后,output.txt为空。我究竟做错了什么?

最佳答案

代码中的问题是您以错误的方式调用subprocess.Popen。为了达到你想要的,如documentation状态,应使用包含“可执行文件”和所有其他参数的字符串列表单独调用 Popen。更准确地说,在您的情况下应该是:

p = subprocess.Popen([filepath, os.path.abspath('.\\file.txt')], stdout=subprocess.PIPE, stdin=subprocess.PIPE)

作为旁注,仅当“可执行文件”启动“要求”输入(标准输入)时,您才应该/会使用.communicate(...)

关于java - 在python子进程中发送字符串作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51616422/

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