4

これはこの質問に関連していますが、別の見方をしています。

Ubuntuでは、Pythonを使用して監視するキーストロークを自動化するAutokeyを使用しています。その<super>+eため、Gedit<shift>+<super>+3を開く、OOwriterを開くなどにマップしました。これらの呼び出しのいずれかを実行すると、呼び出された前のプログラムが終了するまで、別の呼び出しを行うことができません。

実行するスクリプトのサンプルは次のとおりです。

import subprocess
subprocess.call("/opt/openoffice.org3/program/scalc")

...以下を使用した同じ動作:

import os
os.system("/opt/openoffice.org3/program/scalc")

これはすべて以前のUbuntu10.04LTSでスムーズに機能しましたが、それ以降は状況が変わり、これらの呼び出しを繰り返すことはできません。

プログラムが終了するのを待たずに、そのsubprocess.call()からフォークするか、何かを「取り戻す」方法を教えていただけませんか。nohupとバックグラウンドを試し/opt/openoffice.org3/program/scalc &ましたが、何もしません(おそらく、AutokeyとPyで何かが壊れます)


回答:以下の回答は実際には機能しませんでしたが、私はもっと詮索し、私の状況に適した別のSO回答を見つけました!

#Enter script code -- mapped to <super>+e
import thread
thread.start_new_thread(os.system,('gedit',))

これは完全に機能しました!! <super>+e2〜3回続けてヒットでき、geditにタブが追加され続けます。:)このスクリプトは、引用符で囲まれたコマンドがコマンドラインで入力されたかのようにAutokeyを動作させます。

4

1 に答える 1

12

Popenの代わりに使用するのと同じくらい簡単ですcall:

import subprocess
subprocess.Popen("/opt/openoffice.org3/program/scalc")

call終了コードを返す必要があるため、そのように動作することはありませんでした。つまり、プログラムは実際に終了する必要があります。

于 2012-06-16T02:08:27.563 に答える