我正在使用crontab爲我的Minecraft服務器運行維護腳本。大多數時候它工作正常,除非crontab嘗試使用重新啓動腳本。如果我手動運行重新啓動腳本,則沒有任何問題。因爲我認爲這與路徑名有關,所以我試圖確保它始終在minecraft目錄中執行任何minecraft命令。所以我在pushd/popd中加入命令:通過os.system推送
os.system("pushd /directory/path/here")
os.system("command to sent to minecraft")
os.system("popd")
下面是一個互動式會話,將Minecraft排除在等式之外。一個簡單的「ls」測試。正如你所看到的,它根本不會從pushd目錄運行os.system命令,而是從/ etc /目錄中運行python來說明我的觀點。清除pushd不能通過python工作,所以我想知道我還能做到這一點。謝謝!
>>> def test():
... import os
... os.system("pushd /home/[path_goes_here]/minecraft")
... os.system("ls")
... os.system("popd")
...
>>> test()
~/minecraft /etc
DIR_COLORS cron.weekly gcrypt inputrc localtime mime.types ntp ppp rc3.d sasldb2 smrsh vsftpd.ftpusers
DIR_COLORS.xterm crontab gpm-root.conf iproute2 login.defs mke2fs.conf ntp.conf printcap rc4.d screenrc snmp vsftpd.tpsave
X11 csh.cshrc group issue logrotate.conf modprobe.d odbc.ini profile rc5.d scsi_id.config squirrelmail vz
adjtime csh.login group- issue.net logrotate.d motd odbcinst.ini profile.d rc6.d securetty ssh warnquota.conf
aliases cyrus.conf host.conf java lvm mtab openldap protocols redhat-release security stunnel webalizer.conf
alsa dbus-1 hosts jvm lynx-site.cfg multipath.conf opt quotagrpadmins resolv.conf selinux sudoers wgetrc
alternatives default hosts.allow jvm-commmon lynx.cfg my.cnf pam.d quotatab rndc.key sensors.conf sysconfig xinetd.conf
bashrc depmod.d hosts.deny jwhois.conf mail named.caching-nameserver.conf passwd rc rpc services sysctl.conf xinetd.d
blkid dev.d httpd krb5.conf mail.rc named.conf passwd- rc.d rpm sestatus.conf termcap yum
cron.d environment imapd.conf ld.so.cache mailcap named.rfc1912.zones pear.conf rc.local rsyslog.conf setuptool.d udev yum.conf
cron.daily exports imapd.conf.tpsave ld.so.conf mailman netplug php.d rc.sysinit rwtab shadow updatedb.conf yum.repos.d
cron.deny filesystems init.d ld.so.conf.d makedev.d netplug.d php.ini rc0.d rwtab.d shadow- vimrc
cron.hourly fonts initlog.conf libaudit.conf man.config nscd.conf pki rc1.d samba shells virc
cron.monthly fstab inittab libuser.conf maven nsswitch.conf postfix rc2.d sasl2 skel vsftpd
sh: line 0: popd: directory stack empty
=== (CentOS的服務器與Python 2.4)在一個單獨過程
我有點糊塗了由去行對我來說,這看起來像是一個簡單的例子:'os.system'生成一個子shell ...做'bash -c'pushd directory'','bash -c「popd」'會給你相同的結果.. 。爲什麼不使用'os.chdir'? – photoionized 2011-05-31 23:02:56
nvm關於混淆線,它是你正在執行的'pushd'的輸出,但分析仍然存在,你的命令不起作用,因爲'os.system'產生了一個子shell。 – photoionized 2011-05-31 23:04:44
...一旦子外殼完成,pushd/popd上下文變得毫無意義。 – macetw 2016-11-07 13:53:49