1

このコマンドを使用して、openoffice を開始します。

soffice --accept="socket,host=localhost,port=8100;urp;StarOffice.Service" --headless --nofirststartwizard

次のコマンドは、openoffice がポート 8100 で接続を受け入れていることを確認します。

netstat -nap | grep office

出力:

tcp        0      0 127.0.0.1:8100          0.0.0.0:* LISTEN     2467/soffice.bin 

openoffice プロセスを開始する Python スクリプト:

command = [
    'soffice',
    '--accept=socket,host=localhost,port=8100;urp;StarOffice.Service',
    '--headless',
    '--nofirststartwizard'
]
subprocess.Popen(command, shell=True)

何らかの理由で、この python スクリプトで openoffice を起動しようとすると、netstat コマンドは何も出力しません。プロセスは存在しますが、接続を受け入れません。私は何を間違っていますか?

4

3 に答える 3

1

ドキュメントから:

shell=True の Unix では、シェルはデフォルトで /bin/sh になります。args が文字列の場合、その文字列はシェルを介して実行するコマンドを指定します。

args がシーケンスの場合、最初の項目はコマンド文字列を指定し、追加の項目はシェル自体への追加の引数として扱われます。

ここでは、シェルに引数を渡す代わりにshell=True、引数を渡すために単に削除する必要があります。soffice

subprocess.Popen(command)

を使用するshell=Trueには、すべての引数を 1 つのコマンドに組み込む必要があります (もちろん、引数はエスケープする必要があります)。

subprocess.Popen(command.join(' '), shell=True)
于 2013-12-26T16:32:08.147 に答える
1

以下は実行されますが、パイプへの UNO 接続は機能しません:

soffice = subprocess.Popen([ '/usr/bin/soffice', '--accept="pipe,name=hello;urp;"', '--norestore', '--nologo', '--nodefault', '--headless', ])

端末のパイプ接続からこれを実行すると、問題なく動作します。

/usr/bin/soffice --accept="pipe,name=hello;urp;" --norestore --nologo --nodefault --headless

デバッガーから、subprocess.Popen が正常に作成され、引数が正しく表示され、pid があることがわかります。なぜこれが起こるのかわかりません。誰でもこれを説明できますか?

私は最終的に次のように動作するようになりました:

soffice = subprocess.Popen(' '.join([ '/usr/bin/soffice', '--accept="pipe,name=hello;urp;"', '--norestore', '--nologo', '--nodefault', '--headless', ]), shell=True)

ただし、 pid を閉じるとsoffice.kill()一部のプロセスが残ることに注意してください。

この問題に関する質問はこちら: OpenOffice Forum Question 29873

于 2016-10-27T17:47:57.273 に答える