运行Python脚本后,终端在给定的目录下?
我正在研究一个简单的Python脚本,它可以使用subprocess
和/或os
来执行一些命令,它工作正常。运行Python脚本后,终端在给定的目录下?
但是,当脚本退出时,我想cd
实际的终端(在这种情况下是OS X)退出时,新文件已准备好在已创建的目录中使用。以下所有(subprocess.Popen
,os.system
,os.chdir
)可以做我想做的从内脚本(即它们在目标目录中执行的东西),但在退出离开码头在脚本自己目录,而不是目标目录。
我想避免写一个shell脚本到临时文件只是为了实现这一点,如果这是可能的话呢?
可悲的是,没有。不允许进程更改父进程的环境,在这种情况下,您的Python脚本是shell的子进程。您可以通过让Python进程设置一个新的shell调用子进程来打开一个shell进程并将其呈现给用户,从自身继承修改后的环境来“伪造”它,但是它有强制Python进程运行的缺点不断。
这实际上是shell脚本的用途。:-)有人显然需要编写一个更传统的shell(例如,比Bash更接近IPython),它可以使用python作为其脚本语言。
您是否尝试过在当前shell中简单地运行程序?
即
$. script.py
,而不是
$script.py
是的,没有 - 同样的问题,但谢谢! – 2010-05-09 21:48:00
您不能在当前shell中运行**非shell **脚本。点前缀在这种情况下没有区别。 – tzot 2010-06-07 13:39:02
暂时遗忘Python,没有子进程可以改变其调用shell的状态。因此,您需要一个能够改变Paul Creasey暗示的调用shell的状态的构造。
alias mycd="cd `echo $1`"
其中echo
可以用script_which_outputs_a_directory_name_on_stdout.py
被替换这是一种黑客攻击的,但至少这是一个古老的黑客。
我明白你的意思了;然而(如果我不重写是shell脚本),我想我会在最后打印'cd [path_to_dir]',以便它可以复制到命令行! – 2010-05-10 12:29:23
谢谢 - 我将重写为shell脚本,并从那里调用Python :-) – 2010-05-09 21:48:41
您不需要离开Python解释器。你只需要按照你想要的方式获得流程环境(例如'os.chdir()')然后'os.execv()'一个新的shell。是的,你仍然会运行一个下级shell,但Python解释器将被替换。 http://docs.python.org/library/os.html#os.execv – msw 2010-05-09 22:30:11
@msw:我从来没有能够可靠地在所有平台上使用shell(特别是PowerShell),但我应该有建议。 – 2010-05-09 22:47:51