【发布时间】:2017-03-02 00:12:37
【问题描述】:
在 windows 命令提示符下运行 python 时出现此语法错误。
即使我没有输入任何内容并按回车键,它仍然会出现语法错误。我唯一能做的就是 Ctrl+Z 退出。 (退出()不起作用)
命令提示符从一个 bat 脚本启动,该脚本首先设置一堆环境变量,然后启动 cmd。这个 bat 文件是通过 subprocess 或 os.system 从 python gui 调用的(两者都有问题)。
bat文件设置如下:
设置 PYTHONPATH=\some\path
...更多 env var 设置(这是这个“自定义”cmd 的目的
start /D "some/location" "cmd"
如果我通过双击它的罚款直接运行bat文件。
运行 echo %PYTHONPATH% 显示两个启动实例中的所有正确路径(所有其他环境变量相同)
为了方便设置所有环境路径,我想从 python gui 启动它。
有什么想法吗?
【问题讨论】:
-
你是否对字符编码或终端行为做了什么奇怪的事情?
-
我不知道。启动过程是 1 行: subprocess.Popen('path\to\bat.bat', shell=True) Bat 如上所述。设置的路径是: PYTHONPATH=myCustomPaths PATH=%PATH%;gitPathForCallingAGit.exe 就是这样为环境。没有碰过别的东西。
-
你用什么命令来启动 Python?此行为看起来像您使用了
-u命令行选项,该选项与 Windows 上的标准 REPL 不兼容。它将stdin置于二进制模式。因此,来自控制台输入的 CRLF 不会被转换为 REPL 所需的 Unix 风格的 LF 行尾。 -
顺便说一句,根据系统上的速度和可用资源,您正在执行的操作可能会导致临时控制台窗口 (conhost.exe) 令人讨厌地闪烁。使用
shell=True运行带有cmd.exe /c的命令。这将创建一个控制台(conhost.exe 进程)。您在该 cmd 实例中运行批处理以设置环境,然后在第二个控制台窗口中生成一个新的 shell。那没有必要。如果您使用默认的shell=False并通过cmd.exe /k运行批处理,那么您不需要以start命令结束。您可以在一个 shell 和一个控制台中完成所有操作。 -
哪个蟒蛇?大声笑第一个python是通过类似的东西运行的:python pythonFile.py。这将启动 GUI。在 GUI 上是一个按钮,它使用子进程运行 bat 文件,它打开一个单独的命令提示符窗口。在此命令提示符下,我通过键入 python 来运行 python。从来不知道或使用过 -u,它是默认打开的选项吗?正如您所提到的,在我看来,这听起来像是一个“行尾”问题。没有注意到任何临时控制台窗口闪烁。奇怪的是,只要我直接双击启动蝙蝠,它就可以正常工作。
标签: python windows batch-file cmd syntax-error