3

Python (Vizard) を使用して、ラップトップで仮想現実環境をリモートで起動しています。ラップトップが閉じられており、ヘッドマウントディスプレイも装着しているユーザーがバックパックに装着しているため、これをリモートで行う必要があります。ネットワーク接続を開き、仮想現実環境をラップトップにロードさせるコマンドを送信できますが、Vizard を完全に閉じないと環境を閉じることができません。

起動するために、次のようにネットワークを追加します。

myNetwork = viz.addNetwork('computer_name')

次に、ネットワーク イベント コールバックを使用してネットワーク メッセージを待ちます。

def onNetwork(e):
    loadWorld(e.preferences)

viz.callback(viz.NETWORK_EVENT, onNetwork)

def loadWorld(preferences):
    <<...>>

したがって、これはうまく機能し、 で指定された設定でプレーヤーを仮想現実環境に起動しますpreferences。しかし、ネットワークを介して別のメッセージを送信すると、新しい世界が古い世界の上に重ねられ、仮想現実環境をきれいに閉じるための有効な方法がないようです。

仮想現実環境をまともに分解できないので、プログラム全体を最初から再起動した方が良さそうです。Vizard には というコマンドがありますが、viz.quit()これを関数呼び出しの前に挿入するloadWorldと、プログラムが完全に停止して に到達しませんloadWorld。だから、私はこれを行うことができる別の方法があるのだろうか.

質問: Python スクリプトに、すべてのリソースを閉じて割り当てを解除し、その後すぐに再起動するように指示するにはどうすればよいですか?

4

2 に答える 2

1

vizard についてはよくわかりませんが、スクリプトを再起動する必要がある場合は、これが 1 つの方法です。

import os, sys

#stuff

def restart():
    args = sys.argv[:]  # get shallow copy of running script args
    args.insert(0, sys.executable)  # give it the executable
    os.execv(sys.executable, args)  # execute the script with current args, effectively relaunching it, can modify args above to change how it relaunches

を呼び出すrestart()と、同じ引数でスクリプトが再起動されます。

これは、* nix 環境のプレーンな古い python スクリプトで、実行可能アクセス許可と先頭にシバンがある場合に機能することを確認できます。これがウィザードの問題に役立つことを願っています

于 2014-06-10T15:58:52.633 に答える
0

上記の答えは、開いているファイル オブジェクトと記述子を閉じos.execv()ません。sys.stdout.flush()os.fsync()

于 2015-10-25T00:30:55.843 に答える