22

次のようなファイルを作成した場合:

import os
print os.getlogin()

cronで実行すると、例外が発生します

print os.getlogin()
OSError: [Errno 22] Invalid argument

シェルで手動で実行すると、動作します。

問題は、 commit() の GitPython 0.3.1 がこの関数を使用しており、それを使用する必要があることです。

回避策はありますか?

Ubuntu10.10/python2.6.6 および Debian5.0.6/python2.5.2 でテストしました。

4

2 に答える 2

40

os.getlogin() ドキュメントから:「プロセスの制御端末にログインしているユーザーを返します。」から実行する場合、スクリプトには制御端末がありませんcron。「ほとんどの場合、環境変数LOGNAMEを使用してユーザーが誰であるかを調べるかpwd.getpwuid(os.getuid())[0]、現在有効なユーザー ID のログイン名を取得する方が便利です。」

GitPython を変更したくないので、これを行うスクリプトを作成できます。

import os, pwd

os.getlogin = lambda: pwd.getpwuid(os.getuid())[0]

import git

# do whatever you need to do with GitPython here

ただし、GitPython でバグを報告する (またはパッチを提出する) ことをお勧めします。

于 2010-12-09T15:04:23.563 に答える
1

動作する可能性のある回避策についてのテストされていない推測 を次に示します。C ライブラリをos.getlogin()呼び出すgetlogin()と、現在のプロセスに対応する utmp レコードでログイン名が検索されます。cron の utmp レコードがないため、次を使用して作成を試みることができます。

sessreg -a <logname> ; do_stuff ; sessreg -d <logname>

あなたのcrontabで。たぶん、sessregオプションをいじる必要があります。そして、あなたがそれを試した場合、これが本当にうまくいったかどうか私に知らせてください:)

于 2010-12-09T15:19:27.647 に答える