当我在Windows命令提示符下运行以下命令时,没问题。
java -jar "C:\Program Files (x86)\SnapBackup\app\snapbackup.jar" main
我尝试在python脚本中运行该命令。它失败。我的python脚本是这样的;
import os
command_line = 'java -jar "C:\Program Files (x86)\SnapBackup\app\snapbackup.jar" main'
os.system(command_line)
收到的错误消息是
错误:无法访问jarfile C:\ Program Files (86)\ SnapBackuppp \ snapbackup.jar
有人可以帮忙吗?感谢。
我正在使用python 2.7.9
答案 0 :(得分:3)
试试这个:
command_line = 'java -jar "C:\\Program Files (x86)\\SnapBackup\\app\\snapbackup.jar" main'
Windows使用反斜杠(" \")而不是正斜杠(" /")。使用Windows命令行本身时这不是问题,但在使用处理转义序列的其他工具时会导致问题。这些转义序列都以反斜杠开头。通常,Python中的字符串会处理它们。
https://docs.python.org/2/reference/lexical_analysis.html#string-literals
如果你密切关注你的错误......
错误:无法访问jarfile C:\ Program Files(x86)\ SnapBackuppp \ snapbackup.jar
...您会注意到SnapBack uppp ,而不是SnapBack up \ app
" \ a"正在处理ASCII Bell(BEL)转义序列(参见上面的链接)。在他们面前带有反斜杠的其他角色没有受到影响,因为它们不对应于转义序列。 (即\P
中的C:\Program Files (x86)
等)
为避免将\a
作为Bell字符处理,我们需要通过键入\\a
来转义反斜杠本身。这样,第二个反斜杠被视为"正常"反斜杠," a"按预期阅读。
您还可以通过执行以下操作告诉Python使用原始(未处理)字符串:
command_line = r'java -jar "C:\Program Files (x86)\SnapBackup\app\snapbackup.jar" main'
(请注意第一个引号字符前的r
。
或者,您也可以使用正斜杠。
command_line = 'java -jar "C:/Program Files (x86)/SnapBackup/app/snapbackup.jar" main'
但是,这可能并不适用于所有情况。
答案 1 :(得分:2)
您应该使用subprocess
代替os.system
https://docs.python.org/2/library/subprocess.html。另外,和我之前的其他人一样,你有未转义的反斜杠。使用os.path.join
来解决问题:
import subprocess, os
jarPath = os.path.join('c:', 'Program Files (x86)', 'SnapBackup', 'app', 'snapbackup.jar')
command_line = ['java', '-jar', jarPath, 'main']
subprocess.call(command_line)
答案 2 :(得分:1)
您在命令行中使用反斜杠。在python中更好地使用正斜杠或使用反斜杠转义反斜杠