

環境は Windows 10, Python 3.6.5 です。  
コマンドプロンプト上で実行に成功したものをPython上で実行しようと考えています(今後の追加ファイルのため)

[code]

    soffice --headless --convert-to ods --infilter="Lotus:60" ./123/test.123
    
[/code]

sofficeコマンドにより `.123` ファイルを `.ods` ファイルに変換するコマンドです。  
`infilter="Lotus:60"` により、日本語を入力として受け取り、拡張子がodsに変換されファイル出力されます。

ここまでの動作確認は出来ており、日本語でファイルも出力されてます。

このコマンドをPython上で実行しようとしたコードがこちらになります。

[code]

    import subprocess
    
    path_to_soffice = 'C:/Program Files/LibreOffice/program/soffice'#sofficeのpath
    subprocess.run([path_to_soffice,'--headless','--convert-to','ods','--infilter="Lotus:60"','./123/test.123'], check=True)
    
[/code]

実行自体はうまく行くのですが、infilterが上手く動いていない様で、sofficeのデフォルト言語(恐らくイタリア語?)でファイルが出力されます。


CC BY-SA 4.0
2021-07-15T13:54:33.070
78210
2021-07-15T16:28:01.837
2021-07-15T16:28:01.837
3060
47307
question
python windows 文字コード
Python の subprocess で複数のパラメータを渡してプログラムを起動した時、意図した通り動作しない


どうもパラメータをリストで指定すると、`"`が`\"`に変換されるようです。

`--infilter="Lotus:60"`と指定したい所が`--infilter=\"Lotus:60\"`となってしまうので、有効なパラメータとみなされなくなってしまうのではないでしょうか？

特に不具合が無ければ、`subprocess.run()`の最初のパラメータを以下のように1つの文字列にまとめてみてはどうでしょう？

[code]

    subprocess.run('"C:/Program Files/LibreOffice/program/soffice" --headless --convert-to ods --infilter="Lotus:60" ./123/test.123', check=True)
    
[/code]


CC BY-SA 4.0
2021-07-15T16:01:56.580
78212
2021-07-15T16:01:56.580
26370
78210
answer