回答編集履歴

3

追記

2022/11/25 11:35

投稿

bsdfan
bsdfan

スコア4574

test CHANGED
@@ -9,6 +9,7 @@
9
9
  # ... の部分は現状の設定から持ってきてください
10
10
  #scp = SCPClient(..., sanitize=False) # 使えません
11
11
  scp = SCPClient(..., sanitize=lambda x: x)
12
+ # ファイル名をダブルクォートで囲ったものを渡す
12
13
  scp.put('test_file.pdf', '"C:/test blank/test_file.pdf"')
13
14
  ```
14
15
 

2

修正

2022/11/25 11:33

投稿

bsdfan
bsdfan

スコア4574

test CHANGED
@@ -3,12 +3,15 @@
3
3
  scpモジュールのデフォルトのエスケープの処理が、unix系(というか、sh)を前提としたものになっていて、細かいところは除いてざっくり言ってしまうと `C:/test blank/test_file.pdf` → `'C:/test blank/test_file.pdf'` のようにシングルクォートで囲む処理になっています。
4
4
  Windowsサーバーの場合、おそらくシェルが cmd.exe なのでダブルクォートでやってやらないといけないと思われます。
5
5
 
6
- ちゃんとやるなら、Windowsサーバーに合わせたエスケープ処理の関数を作るのがいいんでしょうが、まじめにやるのはちょっと大変そうなので、デフォルトのエスケープ処理をoffにして(`sanitize=False`)、引数で渡すファイル名を手作業でエスケープしておいてやるのではどうでしょう。
6
+ ちゃんとやるなら、Windowsサーバーに合わせたエスケープ処理の関数を作るのがいいんでしょうが、まじめにやるのはちょっと大変そうなので、デフォルトのエスケープ処理をoffにして ~~(sanitize=False)~~、引数で渡すファイル名を手作業でエスケープしておいてやるのではどうでしょう。
7
7
 
8
8
  ```python
9
9
  # ... の部分は現状の設定から持ってきてください
10
- scp = SCPClient(..., sanitize=False)
10
+ #scp = SCPClient(..., sanitize=False) # 使えません
11
+ scp = SCPClient(..., sanitize=lambda x: x)
11
12
  scp.put('test_file.pdf', '"C:/test blank/test_file.pdf"')
12
13
  ```
13
14
 
15
+ ### 追記
16
+ `sanitize=False` が使えるようになったものは、まだリリースされていないみたいです。確認不足ですいません。
14
17
 

1

追記

2022/11/25 11:12

投稿

bsdfan
bsdfan

スコア4574

test CHANGED
@@ -6,6 +6,7 @@
6
6
  ちゃんとやるなら、Windowsサーバーに合わせたエスケープ処理の関数を作るのがいいんでしょうが、まじめにやるのはちょっと大変そうなので、デフォルトのエスケープ処理をoffにして(`sanitize=False`)、引数で渡すファイル名を手作業でエスケープしておいてやるのではどうでしょう。
7
7
 
8
8
  ```python
9
+ # ... の部分は現状の設定から持ってきてください
9
10
  scp = SCPClient(..., sanitize=False)
10
11
  scp.put('test_file.pdf', '"C:/test blank/test_file.pdf"')
11
12
  ```