簡體   English   中英

無法在python上運行轉義的Windows命令行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM