从python运行jar时的权限错误

时间:2013-10-10 22:52:21

标签: python jar

我有一个.jar存档,它可以加载一个文件,然后用它做一些事情并再次将它写入磁盘。

如果我直接从命令提示符调用.jar,一切正常。但是当我尝试在python中执行此操作时,我收到以下错误:

Input file ("C:\xxx.txt") was not found or was not readable.

这是我的python代码:

import sys, os, subprocess

if os.path.isdir(sys.argv[1]):
    for file in os.listdir("."):
        print (" ".join(['java', '-jar', sys.argv[2], 'd', "\"" + os.path.abspath(file) + "\"", "\""+os.path.join(os.path.join(os.path.abspath(os.path.dirname(file)), "output"), file) + "\""]))

        subprocess.call(['java', '-jar', sys.argv[2], 'd', "\"" + os.path.abspath(file) + "\"", "\""+os.path.join(os.path.join(os.path.abspath(os.path.dirname(file)), "output"), file) + "\""])

当我将打印的语句复制到命令行中时,jar会完美地执行;一切正常。我尝试将cmd作为管理员运行,但这没有帮助。

1 个答案:

答案 0 :(得分:1)

问题是您要添加的额外报价。当你传递subprocess一个args列表时,它已经适当地引用了它们;如果你自己引用它们,它最终会引用你的引号,所以不要传递一个论点,当没有引用时,意味着C:\xxx.txt,你将传递一个论点,当没有引用时,意味着{{1} },这不是有效的路径名。

Windows *的经验法则是:如果您确切知道每个参数应该是什么,请将它们作为列表传递,并且不要尝试自己引用它们;如果您确切知道最终的命令行字符串应该是什么,请将其作为字符串传递,并且不要试图将其分解为单独的参数列表。


*请注意,这仅适用于Windows。在POSIX上,除非您使用"C:\xxx.txt",否则基本上永远不会使用字符串。