通过Python脚本更改提示工作目录
是否可以通过Python脚本更改Windows命令提示符工作目录 e、 g 我尝试了一些不起作用的方法:通过Python脚本更改提示工作目录,python,windows,scripting,Python,Windows,Scripting,是否可以通过Python脚本更改Windows命令提示符工作目录 e、 g 我尝试了一些不起作用的方法: import os os.chdir(path) 据我所知,并观察到这些操作改变了当前进程的工作目录——这是Python进程,而不是执行它的提示符 谢谢 更新 我想要更改的路径是动态的(基于我正在处理的项目,构建位置的完整路径会更改),因此我想用Python编写解决方案,而不是使用Windows批处理文件 更新 最后我一起破解了一个批处理文件来完成这个任务;( 谢谢大家。我不清楚您想
import os
os.chdir(path)
据我所知,并观察到这些操作改变了当前进程的工作目录——这是Python进程,而不是执行它的提示符 谢谢 更新 我想要更改的路径是动态的(基于我正在处理的项目,构建位置的完整路径会更改),因此我想用Python编写解决方案,而不是使用Windows批处理文件 更新 最后我一起破解了一个批处理文件来完成这个任务;(
谢谢大家。我不清楚您想在这里做什么。您想要一个可以从Windows命令提示符运行的python脚本,它将更改Windows命令会话的工作目录吗 如果是这样,我99.9%肯定那是不可能的。正如你自己所说的,
python.exe
进程是与Windowscmd.exe
分开的进程,你在python中所做的任何事情都不会影响命令提示符
通过Windows API,您可能可以通过向Windows发送击键之类的方式来执行某些操作,但这将非常脆弱
我能想到的唯一两个实用选项是将Python脚本包装到批处理文件中:
cmd.exe
窗口,并使批处理文件关闭原始命令窗口与问题中出现的命令类似,在subceess内部显式执行的任何更改都是相同的。一个常见的解决方案是由两部分组成的脚本 第1部分是Python,它创建了一个临时的.BAT文件,其中包含相应的CD命令 第2部分是临时的.BAT文件 蝙蝠
python figurethepath.py >temp.bat
temp.bat
我有一个Python脚本,可以更轻松地在文件树中移动: 简单地说,我有一个xdir.py文件,它将Windows命令写入标准输出:
# Obviously, this should be more interesting..
import sys
print "cd", sys.argv[1]
然后是一个xdir.cmd文件:
@echo off
python xdir.py %* >%TEMP%\__xdir.cmd
call %TEMP%\__xdir.cmd
然后我创建一个doskey别名:
doskey x=xdir.cmd $*
最终的结果是我可以打字
$ x subdir
并将其转换为subdir
我上面链接的脚本做的更多,包括记忆历史、维护目录堆栈、接受目录速记等等。正如人们提到的,子进程(即您的程序)无法更改父进程(即终端)的当前工作目录这就是为什么你需要每个人都在描述的两个步骤。在大多数shell中,有一种方法可以生成宏或函数来执行这两个步骤的功能 例如,在
bash
中,您可以创建一个别名来计算路径并更改当前工作目录,类似于针对Windows的描述:
alias my_cd='TMP=`compute_path.py`; cd $TMP;'
请注意,
cd
命令仍在父进程(终端)中解释,它有能力更改自己当前的工作目录。一行BAT文件有什么问题?为什么要编写Python?路径不是静态的-从某种意义上说,取决于我正在处理的程序,路径的一部分会发生更改。因此,我分解目录,深入了解去哪里,然后进行更改。文件结构不好,但我不是我创建的,我只是需要使用它!请用这些额外的事实更新你的问题。请看我对Ned的回答,我想我将在Ned上尝试你的“xdir”脚本,它可能对我和我团队中的其他人非常有用。谢谢。谢谢你确认这个坏消息!我将@Ned Batchelder标记为我的答案,因为这是一个next对我来说是最好的解决方案。不过,我已经记下了你的答案;-)嗨!请解释为什么这是OPs代码的解决方案,因为不鼓励只回答代码。这将有助于OP和网站的未来访问者。谢谢
imoprt os
os.system("start cmd.exe /k \"cd /d c:\\windows\\system32 & python make_decision_change_dir.py\"")
doskey x=xdir.cmd $*
$ x subdir
alias my_cd='TMP=`compute_path.py`; cd $TMP;'
imoprt os
os.system("start cmd.exe /k \"cd /d c:\\windows\\system32 & python make_decision_change_dir.py\"")