我有一個項目,我把一個路徑作爲參數,並使用Tivoli Storage Manager(TSM),我執行該路徑樹的分段備份。 目前爲止這麼好。奇怪的行爲使用python3 subprocess.Popen和引號之間的參數
當我嘗試使用空格備份路徑時,我發現了一個奇怪的行爲。 當我使用TSM時,我將路徑放在引號中,並且工作正常。 另一方面,在python(3.5.2)上,當我嘗試使用subprocess.Popen執行命令時,tsm告訴我無法找到路徑。奇怪的行爲是將參數路徑與當前目錄連接起來。
一旦:它僅當處理具有空格的路徑,即, 「/ APPDATA/mtmradar/IXD /汽車ë的Ar/07_821_261_6 /」
我已經讀了一些問題等16114713 hapens。
順便說一下,我發現,當使用刪除引號列表時,我可以正確執行命令。 我的問題是:爲什麼它連接我的當前路徑與參數路徑?
我在AIX 7.2上使用Python 3.5.2。 完整的命令是這樣的:
>>> from subprocess import Popen
>>> with Popen(['/usr/bin/dsmc', 'i', '-quiet', '-optfile=/usr/tivoli/tsm/client/ba/bin64/dsm-NAS-SDER00019.opt', '-sub=yes', '"/appdata/mtmradar/ixd/Autos e Ar/07_821_261_6/"']) as proc:
... pass
...
這是我的了:
IBM Tivoli Storage Manager
Command Line Backup-Archive Client Interface
Client Version 7, Release 1, Level 3.0
Client date/time: 07/18/17 10:37:54
(c) Copyright by IBM Corporation and other(s) 1990, 2015. All Rights Reserved.
Node Name: NAS-SDER00019
Session established with server CELBKP03: AIX
Server Version 7, Release 1, Level 4.100
Server date/time: 07/18/17 10:38:04 Last access: 07/18/17 10:27:03
Incremental backup of volume '"/appdata/mtmradar/ixd/Autos e Ar/07_821_261_6/"'
ANS1076E The specified directory path '/usr/tivoli/tsm/client/ba/bin64/tsm_seg_bkp_python/NAS-SDER00019/"/appdata/mtmradar/ixd/Autos\ e\ Ar/07_821_261_6/"' could not be found.
執行相同的命令不帶路徑的雙引號,我沒有任何錯誤:
>>> with Popen(['/usr/bin/dsmc', 'i', '-quiet', '-optfile=/usr/tivoli/tsm/client/ba/bin64/dsm-NAS-SDER00019.opt', '-sub=no', '/appdata/mtmradar/ixd/Autos e Ar/07_821_261_6/']) as proc:
... pass
...
這是輸出:
IBM Tivoli Storage Manager
Command Line Backup-Archive Client Interface
[...]
Incremental backup of volume '/appdata/mtmradar/ixd/Autos e Ar/07_821_261_6/'
Successful incremental backup of '/appdata/mtmradar/ixd/Autos e Ar/07_821_261_6/*'
Total number of objects inspected: 4
[...]
Total data reduction ratio: 100.00%
Elapsed processing time: 00:00:01
定義個人時,不要使用引號中的相對路徑「subprocess.Popen」的參數 - 它會自動跳過你的參數,併爲其運行的shell定製。 – zwer
謝謝,@ zwer。我明白那個。我唯一的dout是關於路徑字符串中的當前路徑。我期待着不同的東西,比如只是不瞭解空間。我甚至試圖逃避這些空間,比如'\',但它並沒有奏效。後來我發現問題是雙引號。 –