Python中的用户定义命令行参数
我在写Python程序的时候遇到了一些问题。简单来说,我想把多个图片的路径发送到命令提示符(用户可以定义要处理多少张图片,所以直接把文件路径写成参数是不够的)。我现在的代码是这样的:
os.system("java -jar C:\\Inetpub\\ftproot\\JPivSource\\jpivc.jar image_00000001.jpg image_00000002.jpg image_00000003.jpg")
我还有很多图片,所以写出像image_00000004、5、6这样的方式显然不够高效,而且每次图片的数量也不一定相同。(jpivc.jar是执行这段代码时打开的程序,它会导入图片并进行处理——这一部分是正常工作的)。理想情况下,我希望代码能像这样:
for i in range(1, NumberOfImages):
os.system("java -jar C:\\Inetpub\\ftproot\\JPivSource\\jpivc.jar image_0000000" + i + ".jpg")
不过,你知道的,我并不想每次i加1的时候都打开jpivc.jar,我只是用上面的代码来展示我想要的效果。不幸的是,这样做不行,因为它只会把“ ”里面的第一部分发送到命令行,如果没有报错信息的话——我第一个问题是,有没有办法让它按照我想要的方式工作?我对Python还比较陌生,所以请尽量简单明了地解释技术细节。
我的第二个问题是——有没有办法关闭命令提示符或者jpivc.jar?我试过所有我能想到的预定义函数,比如os.system("tskill cmd.exe")
及其变种,os.kill()
(不过我用的是2.5版本,所以这个不工作我也不奇怪),Popen.kill()
和Popen.terminate()
,甚至还尝试用ctypes
写自己的关闭函数。结果都不行——直到手动关闭cmd.exe或jpivc.jar,后面的代码才能正常运行。我觉得Python在命令行关闭之前是不会继续执行的——这在我想从Python关闭命令行时就很麻烦!总结一下:为什么会这样停住?我该怎么解决这个问题?
如果需要,我可以提供更多代码片段——我在Windows XP Professional上使用的是Python 2.5.4。别让我提供jpivc.jar的内容——我连Java的最基本概念都不懂。
提前谢谢你,
Dave
1 个回答
我觉得你可能在找这样的东西
fileNames=""
for i in range(1, NumberOfImages):
fileNames += "image_0000000%d.jpg "%i
os.system( "java -jar C:\\Inetpub\\ftproot\\JPivSource\\jpivc.jar %s"%fileNames )
把你的文件名从 script.py 改成 script.pyw,这样就不会打开命令提示符了。
jpivc.jar 会一直保持打开状态,直到你手动关闭它,或者程序员修改代码让它在处理完所有文件后自动退出。
[编辑]
我找到了关于启动和结束一个进程的方法
pidId = os.spawnl(os.P_NOWAIT, "\\windows\\notepad.exe")
import win32api
win32api.TerminateProcess(pidId ,0)