【问题标题】:os.system doesn't work in Pythonos.system 在 Python 中不起作用
【发布时间】:2012-06-07 09:45:42
【问题描述】:

我正在使用 windows vista,但我正在从 DOS 命令运行 python。我有这个简单的 python 程序。 (其实就是一个名为test.py的py文件)

import os
os.system('cd ..')

当我从 Dos 命令执行“python test.py”时,它不起作用。 例如,如果执行前的提示 Dos Command 是这样的:

C:\Directory>

执行后,一定是这样的:

C:\>

请帮忙。

【问题讨论】:

  • How do I "cd" in python的可能重复
  • 错误是什么?它不做什么?
  • 您所做的会启动一个外部程序,该程序会更改自己的目录,然后退出。它对python进程本身没有影响。
  • 如何更改路径并查看 Dos 命令的即时效果?有可能吗?
  • 如果改变 CWD 是你想要的,你可以做 os.chdir('..')

标签: python command system dos


【解决方案1】:

我并不真正使用 Windows,但您可以尝试cmd /k yourcommandhere。这将执行命令,然后返回到 CMD 提示符。 例如,也许你可以像这样做你想做的事:

subprocess.call(['cmd', '/k', 'cd .. &&  prompt changed'])

正如我所说,我不熟悉 Windows,所以语法可能是错误的,但你应该明白。

如果您不知道,这是一个不同于您在启动 Python 脚本之前所在的 CMD 实例。因此,当您退出时,您的 python 脚本应该继续执行,完成后,您将回到原来的 CMD。

【讨论】:

    【解决方案2】:

    首先,您通常不想使用os.system - 请改用subprocess module。但是,这并不能解决您当前的问题(只是您可能遇到的一些问题)-cd 不起作用的实际原因是因为它更改了 子进程 的工作目录,并且不会影响 Python 正在运行的进程 - 为此,请使用 os.chdir。

    【讨论】:

    • 如何更改路径并查看 Dos 命令的即时效果?有可能吗?
    • @user1038382 很难说出你的意思,但我认为 os.chdir(newworkingdir) 后跟subprocess.call(['cmd']) 会做你想做的事。更改 Python 的工作目录将对您在该点之后生成的每个子进程产生持续影响。
    • lvc,非常感谢。有用。现在我要求别的东西,这可以工作吗(更改提示 Dos 命令): os.system('prompt changed ') subprocess.call(['cmd'])?
    • @user1038382 不容易,或者我能想到或找到的任何方式。如果cmd 接受一个参数来更改其提示或查看环境变量(正如 *nix 上的等价物所倾向于的那样),您可以这样做,但简短的搜索没有发现任何暗示是这种情况。发送一个命令进入一个打开的cmd 是可行的,但很重要——即使cmd 监听STDIN 上的命令,Python 目前在stdlib 中没有异步IO。将prompt 作为子进程调用将不起作用,原因与将cd 作为子进程调用不起作用的原因相同。所以,如果它是可行的,它可能并不容易。
    • 非常感谢。你是个天才;-)
    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多