Python异步运行带有递增变量的Java命令行参数。

Python异步运行带有递增变量的Java命令行参数。,java,python,command-line,asynchronous,arguments,Java,Python,Command Line,Asynchronous,Arguments,我有一个java程序,它执行单独的任务,例如接收一个文件,对其进行一些处理并创建一个新文件。要运行它,我必须在命令行中键入以下内容 java myprogram.jar -input myfile1.txt -output output/myfile1.txt 但是,我希望批处理几千个文件,因此我希望增加字符串myfile部分末尾的数字。因此,一旦第一个作业完成,第二个作业就会开始,依此类推。而不是让数千个java程序实例同时运行 任何帮助都将不胜感激 Jon这是bash脚本(如果您在*nix

我有一个java程序,它执行单独的任务,例如接收一个文件,对其进行一些处理并创建一个新文件。要运行它,我必须在命令行中键入以下内容

java myprogram.jar -input myfile1.txt -output output/myfile1.txt
但是,我希望批处理几千个文件,因此我希望增加字符串myfile部分末尾的数字。因此,一旦第一个作业完成,第二个作业就会开始,依此类推。而不是让数千个java程序实例同时运行

任何帮助都将不胜感激


Jon

这是bash脚本(如果您在*nix环境中)或.bat文件(如果您在Windows中)的完美使用。Bash示例:

#!/bin/bash
for i in {1..5}
do
   java myprogram.jar -input myfile$i.txt -output output/myfile$i.txt
done

我会使用bash或其他东西,但如果需要使用python,可以使用subprocess.call来执行此操作:

from subprocess import call
for i in range(1,1000):
    call(["java myprogram -input myfile%d.txt -output" % (i)])

我建议只修改Java程序来处理整个目录,这样Java程序就可以处理目录中的所有文件并写出几个输出文件,而不是移交文件,而是移交一个目录来处理。对输出使用一些简单的名称映射方案。这样,如果您想提高多核设备的速度,就可以利用线程一次处理多个文件。这也可以降低开销,因为只有1个JVM在运行


要做到这一点,您不必修改Java程序。您可以编写一个新程序,利用JVM中的代码。

这不是顺序的。它将在1000个进程中启动1000个JVM,您的机器可能会崩溃。您确定吗?我认为subprocess.call必须阻塞,因为它返回一个返回代码。此外,DOCS说它等待命令完成:<代码> Range[O]/代码>函数应该是:<代码>范围(11001)< /代码>。您要考虑用<代码> { 0 } /代码>替换< <代码> %d > />代码>使用<代码> >格式(i)< />代码>而不是<代码> %i(i)以更新字符串格式样式更新。感谢Paul的建议。我认为我把问题复杂化了,因为需要python。虽然你的解决方案看起来不错。谢谢你的帮助。Jon.是的,但是python在Unix和Windows之间是可移植的,您可以在python中轻松实现这一点,而不必使用bash脚本,因为bash脚本的可移植性较差。这很公平,但OP希望在一台机器上运行它,并且可能只在文件中运行一次。一个快速的bash/.bat脚本就可以做到这一点。多亏了这个解决方案,文件名有点复杂,不过我想我可以创建嵌套循环。我想我对python的需求过于复杂了。干杯乔恩