2017-01-24 16 views
3

私は非常に単純な問題があります。以下で始まるPythonスクリプト:Python sys.stdoutがinit.dスクリプトで動作しない

import sys 
sys.stdout = open("server.out", 'w') 

私は、端末

python start_server.py & 

に直接このコマンドを入力するとそれはserver.outファイルを書き込みます。 私はservice tdserver startを入力した場合、すべてのinit.dスクリプトはこれですん:他に

python start_server.py & 

同じコマンド、何もありません。しかし、この場合、stdoutは書かれませんserver.out

なぜですか?何のプロセスがファイルのロックを持っていない、スクリプトはデフォルトでps -aux

+1

ファイル名にフルパスを使用してください。 ( "/ tmp/server.out"、 "w")を開き、/ tmpにファイルがあるかどうかを調べてください。 – Yaron

+0

問題が修正されました。私はデフォルトのexecディレクトリがどんなものかと思います。私はそれを回答として追加して受け入れることができます。 –

答えて

2

コメントで述べたように:

あなたはcurrent directoryserver.outに書いていました。

current directoryinit.dは、/etc/init.d(linusgに記載されているように)です。

出力ファイル(書き込み可能な場所)に絶対パスを使用すると、問題は解決します。

2

で停止していることが確認され、init.dサービスのための作業ディレクトリはHow do I execute an arbitrary script with a working directory of the directory its in?を参照してください、/etc/init.dです。

ソリューション:コメントで述べたように、あなたのPythonコードで

  1. 使用絶対パス、。

  2. python start_server.py &でPythonスクリプトを開始する前に、単純にcd /your/path/で作業ディレクトリを変更してください。

希望します。

関連する問題