Python os.getlogin problem

前端 未结 2 1083
时光取名叫无心
时光取名叫无心 2021-02-12 13:56

If i create a file like:

import os
print os.getlogin()

and run it with cron, I get an exception

print os.getlogin()
OSError: [E         


        
相关标签:
2条回答
  • 2021-02-12 14:16

    Here is an untested guess about a work-around that might work: os.getlogin() calls getlogin() in the C library, which in turn looks up the login name in the utmp record corresponding to the current process. Since there is no utmp record for cron, you could try to create one using

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

    in your crontab. Maybe you have to twiddle around with the sessreg options. And let me know if this really worked if you tried it :)

    0 讨论(0)
  • 2021-02-12 14:21

    From the os.getlogin() docs: "Returns the user logged in to the controlling terminal of the process." Your script does not have a controlling terminal when run from cron. The docs go on to suggest: "For most purposes, it is more useful to use the environment variable LOGNAME to find out who the user is, or pwd.getpwuid(os.getuid())[0] to get the login name of the currently effective user id."

    Since you don't want to modify GitPython, you could write a script that does this:

    import os, pwd
    
    os.getlogin = lambda: pwd.getpwuid(os.getuid())[0]
    
    import git
    
    # do whatever you need to do with GitPython here
    

    I would suggest filing a bug (or better yet, submitting a patch) with GitPython, though.

    0 讨论(0)
提交回复
热议问题