python
  • windows
  • python-2.7
  • command-line
  • escaping
  • 2015-09-08 119 views 1 likes 
    1

    當我在Windows命令提示符下,沒有問題運行以下命令。不能運行逃過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) 
    

    收到錯誤消息是

    Error: Unable to access jarfile C:\Program Files (x86)\SnapBackuppp\snapbackup.jar

    有人能幫忙嗎?謝謝。

    我使用Python 2.7.9

    +0

    您是否注意到錯誤消息在SnapBackup末尾有3個字母'p'?這是在問題或python文件中的錯字? – anneb

    +0

    python代碼沒有錯。再次檢查。我從pycharm IDE複製並粘貼了錯誤消息。我真的不知道爲什麼有3頁。奇怪。 – user781486

    +3

    反斜槓!使用正斜槓或轉義反斜槓,如\\ – anneb

    回答

    1

    您正在命令行中使用反斜槓。在蟒蛇更好地利用斜線或使用反斜線

    +0

    正確。 Upvoted並標記爲正確! – user781486

    2

    你應該使用subprocess代替os.systemhttps://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) 
    
    +0

    奇怪。出現相同的錯誤。但是,謝謝。 Upvoted。 – user781486

    +0

    剛剛注意到這個問題下的意見。其他人比我有更快的手指:)。我已經更新了我的答案,提供了一個跨平臺的方式。使用''os.path.join''就可以實現,所以你不必擔心什麼樣的斜槓適合使用。 –

    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

    如果你在你的錯誤仔細一看......

    Error: Unable to access jarfile C:\Program Files (x86)\SnapBackuppp\snapbackup.jar

    ......你會發現,它說的SnapBack UPPP,而不是快照合併了\應用

    發生了什麼?

    的 「\ A」 正在處理作爲ASCII貝爾(BEL)轉義序列(見上文鏈接)。前面帶有反斜槓的其他字符不受影響,因爲它們不對應於轉義序列。 (也就是說,在C:\Program Files (x86)\P等)

    爲了避免處理\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'

    但是,這可能不適用於所有情況。

    相關問題