teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/01/29 05:04

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -1,3 +1,24 @@
1
1
  `~inkscape.exe" + name + ".svg" + "-M" + name + ".emf" ~`だと`name`が`hoge`だった場合
2
2
  `~inkscape.exehoge.svg-Mhoge.emf~`のように文字列がひっついてしまいます。
3
- `~inkscape.exe " + name + ".svg " + " -M " + name + ".emf" ~`のようにスペース文字を入れてみてください。
3
+ `~inkscape.exe " + name + ".svg " + " -M " + name + ".emf" ~`のようにスペース文字を入れてみてください。
4
+
5
+ #### さらに
6
+ - `inkscape`や画像のファイルパスにスペースが含まれていても大丈夫なように、パス名はダブルクオーテーションで囲みます。
7
+ - `Python`の実行ディレクトリと画像のあるディレクトリが異なっていてもよいように、画像はフルパスで渡します。
8
+ - コマンド文字列全体を`cmd`変数として作成し、printで表示することで設定ミスなどがないか確認しやすくなります。
9
+
10
+ 上記をふまえると以下のようなコードでよいかと思います。各パス名はご自身の環境に合わせてください。
11
+ ```Python
12
+ import subprocess
13
+ import os
14
+
15
+ ink_path = 'C:/Program Files/Inkscape/inkscape.exe'
16
+ path = 'C:/users/user/desktop/img dir' # スペースを含むディレクトリ名
17
+
18
+ lis = os.listdir(path)
19
+ for i in lis:
20
+ name = os.path.splitext(os.path.basename(i))[0] # 拡張子を取り除く
21
+ cmd = '"{}" "{}/{}.svg" -M "{}/{}.emf"'.format(ink_path, path, name, path, name)
22
+ print(cmd)
23
+ subprocess.call(cmd,shell=True)
24
+ ```