0

バックグラウンド

起動時に実行される Python スクリプトを作成する必要があります。問題は、このスクリプトはさまざまなオペレーティング システムで使用されるため、プラットフォームに依存しない必要があることです。ユーザーが実行するため、自動セットアップが必要であり、個々のマシンにタスク スケジューラをセットアップすることはできません。

質問

  1. Pythonでコンピュータが実行されているOSを見つける方法は?
  2. 起動時にスクリプトを実行する方法 (Linux、Mac OSX、Windows)
4

1 に答える 1

6

質問 1 は簡単です。

Pythonでコンピュータが実行されているOSを見つける方法は?

それはsys.platform

if sys.platform.startswith('win') or sys.platform.startswith('cygwin'):
    do_windows_stuff()
elif sys.platform.startswith('darwin'):
    do_osx_stuff()
elif sys.platform.startswith('linux'):
    do_linux_stuff()
else:
    raise Exception("Nobody's written the stuff for {}, sorry".format(sys.platform))

2番目の部分も簡単ですが、あなたが聞きたかった方法ではありません:

起動時にスクリプトを実行する方法 (Linux、Mac OSX、Windows)

あなたはそうしない。スクリプト内からではありません。ある種のインストーラー (またはパッケージの postflight スクリプトなど) を使用します。

起動時に実行されるものを追加するには、ルート/管理者権限が必要です。あなたのスクリプトは(うまくいけば)そのような権利で実行されていません。したがって、それはできません。はい、さまざまな方法で特権を昇格させることができますが、起動時に最終的に実行されるスクリプト内で実行したいことはほぼ確実ではありません。

では、インストーラーはどのようにそれを行うのでしょうか?

OS X: launchd plist を伴う Launch Daemon を作成する必要があります。これについては、「起動デーモンとエージェントの作成」で説明されています。その記事を読んでいない場合は、これを行うべきではありません。また、その記事を読んだことがある場合は、その方法が既にわかっているため、他に言うことはあまりありません。

Windows: これを行う公式の方法は、Run and RunOnce Registry Keysで説明されています。繰り返しますが、この記事を読まずにこれを行うべきではありません。この記事を読めば、次の 2 つの点を除いて明らかです。まず、4 つのキーのうち、HKLM Run キーです。次に、最新の Windows では、これは実際には起動時に実行されるのではなく、起動後の最初のログイン時に実行されます。それが受け入れられない場合は、RunServices代わりに検討してください。

Linux: インストーラーとは? そして、すべてのディストリビューション ファミリに対して 1 つの方法でそれを行うことを期待していましたか? この入門書は、各ディストリビューションで何をしたいのかを正確に知ることを除いて、必要なほとんどの情報を提供します. 一般に、スクリプトを 1 回だけ実行して終了させたい場合は、 , がありrc.local.d、そこにリンクをドロップするだけです。それ以外の場合は、rc.dスクリプトを作成して適切な場所にインストールし、適切なchkconfigコマンドを実行するか、編集する必要がありますrc.localスクリプトを実行します。しかし、最も簡単なことは、英語のテキストを INSTALL ファイルに入れ、人々にそうするように伝えることです。最終的に、誰かが Ubuntu 用の DEB や Redhat 用の RPM などを作成することを決定した場合、彼らは自分のディストリビューションに対して正しいことを行い、パッチを提出するか、個別に維持します。

于 2013-02-22T01:02:27.373 に答える