Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python脚本更改提示工作目录_Python_Windows_Scripting - Fatal编程技术网

通过Python脚本更改提示工作目录

通过Python脚本更改提示工作目录,python,windows,scripting,Python,Windows,Scripting,是否可以通过Python脚本更改Windows命令提示符工作目录 e、 g 我尝试了一些不起作用的方法: import os os.chdir(path) 据我所知,并观察到这些操作改变了当前进程的工作目录——这是Python进程,而不是执行它的提示符 谢谢 更新 我想要更改的路径是动态的(基于我正在处理的项目,构建位置的完整路径会更改),因此我想用Python编写解决方案,而不是使用Windows批处理文件 更新 最后我一起破解了一个批处理文件来完成这个任务;( 谢谢大家。我不清楚您想

是否可以通过Python脚本更改Windows命令提示符工作目录

e、 g

我尝试了一些不起作用的方法:

import os
os.chdir(path)



据我所知,并观察到这些操作改变了当前进程的工作目录——这是Python进程,而不是执行它的提示符

谢谢

更新

我想要更改的路径是动态的(基于我正在处理的项目,构建位置的完整路径会更改),因此我想用Python编写解决方案,而不是使用Windows批处理文件

更新

最后我一起破解了一个批处理文件来完成这个任务;(
谢谢大家。

我不清楚您想在这里做什么。您想要一个可以从Windows命令提示符运行的python脚本,它将更改Windows命令会话的工作目录吗

如果是这样,我99.9%肯定那是不可能的。正如你自己所说的,
python.exe
进程是与Windows
cmd.exe
分开的进程,你在python中所做的任何事情都不会影响命令提示符

通过Windows API,您可能可以通过向Windows发送击键之类的方式来执行某些操作,但这将非常脆弱

我能想到的唯一两个实用选项是将Python脚本包装到批处理文件中:

  • 从Python脚本中输出所需的目录,读取批处理文件中的输出,并将CD刻录到其中
  • 从批处理文件启动Python脚本,允许Python脚本启动新的
    cmd.exe
    窗口,并使批处理文件关闭原始命令窗口
  • 声明将为子进程创建一个子进程,因此任何工作目录更改都将是该子进程的本地更改

    如果cwd不是None,则在执行之前,子级的当前目录将更改为cwd。请注意,搜索可执行文件时不考虑此目录,因此无法指定程序相对于cwd的路径


    与问题中出现的命令类似,在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\"")