我正在研究一个简单的Python脚本,它可以使用subprocess
和/或os
执行一些命令,这些命令工作正常。
但是,当脚本退出时我想cd
实际终端(在本例中为OS X),所以在退出时,新文件就可以在创建目录的目录中使用了。以下所有内容(subprocess.Popen
,os.system
,os.chdir
)可以在脚本中执行我想要的内容(即他们在目标目录中执行内容),但是exit离开脚本自己的目录下的终端,而不是目标目录。
我想避免将shell脚本编写到临时文件中以实现此目的,如果这种情况完全可能的话呢?
答案 0 :(得分:10)
可悲的是,没有。不允许进程更改其父进程的环境,在这种情况下,您的Python脚本是shell的子进程。您可以通过让Python进程设置一个新的shell调用子进程来打开shell进程并将其呈现给用户,从自身继承修改后的环境,从而“伪造”它 - 但这有助于强制Python进程运行不断。
这就是shell脚本的用途.. :-)有人显然需要编写一个更传统的shell(比如接近Bash而不是IPython),它可以使用python作为脚本语言。
答案 1 :(得分:4)
暂时忘记Python,没有子进程可以改变其调用shell的状态。因此,你需要一个改变调用shell状态的结构,这正是Paul Creasey所暗示的。
alias mycd="cd `echo $1`"
其中echo
可以替换为script_which_outputs_a_directory_name_on_stdout.py
这是一种黑客攻击,但至少它是一个老黑客。
答案 2 :(得分:1)
您是否尝试过在当前shell中运行该程序?
即
$. script.py
而不是
$script.py