是否可以通过Python脚本更改Windows命令提示符工作目录?
e.g。
>> cd
>> c:\windows\system32
>> make_decision_change_dir.py
>> cd
>> c:\windows
我尝试了一些不起作用的东西:
import os
os.chdir(path)
import os, subprocess
subprocess.Popen("chdir /D \"%s\"" %path, shell=True)
import os, subprocess
subprocess.Popen("cd \"%s\"" %path, shell=True)
import os, subprocess
subprocess.Popen("CD=\"%s\"" %path, shell=True)
据我了解并观察这些操作会更改当前进程的工作目录 - 这是Python进程,而不是从其执行的提示。
感谢。
更新
我想要改变的路径是动态的(基于我正在处理的项目,构建位置的完整路径发生变化)因此我想用Python编写解决方案,而不是使用Windows批处理文件进行破解
更新
我最终一起攻击批处理文件来执行此操作;( 谢谢大家。
答案 0 :(得分:3)
我不清楚你想在这做什么。您是否想要一个可以从Windows命令提示符运行的python脚本,它将更改Windows命令会话的工作目录?
如果是这样,我99.9%肯定这是不可能的。正如您所说,python.exe
进程是与Windows cmd.exe
不同的进程,您在Python中执行的任何操作都不会影响命令提示符。
你可以通过Windows API向Windows发送击键或其他东西,但它会非常脆弱。
我能想到的唯一两个实用选项涉及将Python脚本包装在批处理文件中:
cmd.exe
窗口并获取批处理文件以关闭原始命令窗口。答案 1 :(得分:2)
我有一个Python脚本,可以更轻松地在文件树中移动:xdir.py
简单地说,我有一个xdir.py文件,它将Windows命令写入stdout:
# 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。
我上面链接的脚本做了很多,包括记住历史记录,维护一堆目录,接受目录的速记等等。
答案 2 :(得分:1)
一个常见的解决方案是由两部分组成的脚本。
第1部分是Python,它创建一个包含相应CD命令的临时.BAT文件。
第2部分是临时.BAT文件。
fancycd.bat
python figurethepath.py >temp.bat
temp.bat
答案 3 :(得分:1)
正如人们提到的,子进程(即你的程序)不能改变父进程(即终端)的当前工作目录。这就是为什么你需要每个人都在描述的两个步骤。在大多数shell中,有一种方法可以使宏或函数执行这个两步功能。
例如,在bash
中,您可以创建一个别名来计算路径并更改当前工作目录,类似于@S.Lott对Windows所描述的内容:
alias my_cd='TMP=`compute_path.py`; cd $TMP;'
请注意,cd
命令仍在父进程(终端)中解释,该进程可以更改其自己的当前工作目录。
答案 4 :(得分:0)
subprocess.Popen()
doc page表示将为子流程创建子流程,因此任何工作目录更改都将是该子流程的本地更改。
如果cwd不是None,子项的当前目录将在执行前更改为cwd。请注意,在搜索可执行文件时不考虑此目录,因此您无法指定程序相对于cwd的路径。
对于在subproceess中明确完成的任何更改,这将是相同的,类似于问题中出现的命令。
答案 5 :(得分:0)
imoprt os
os.system("start cmd.exe /k \"cd /d c:\\windows\\system32 & python make_decision_change_dir.py\"")