![](/img/trans.png)
[英]python fabric run(command) the command is escaped ' change to \'?
[英]Cannot run escaped Windows command line on python
當我在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(x86)\\ SnapBackuppp \\ snapbackup.jar
有人可以幫忙嗎? 謝謝。
我正在使用python 2.7.9
嘗試這個:
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)轉義序列進行處理(請參見上面的鏈接)。 前面帶有反斜杠的其他字符不會受到影響,因為它們與轉義序列不對應。 (即C:\\Program Files (x86)
的\\P
等)
為了避免將\\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'
但是,這可能並非在所有情況下都有效。
您可能應該使用subprocess
os.system
而不是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)
您在命令行中使用反斜杠。 在python中最好使用正斜杠或使用反斜杠轉義反斜杠
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.