我正在使用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