【问题标题】:Strange Behavior Calling Windows Python from Within WSL (Bash on Windows)从 WSL 中调用 Windows Python 的奇怪行为(Windows 上的 Bash)
【发布时间】:2018-06-01 16:32:12
【问题描述】:

安装 WSL 后,我在 PC 上安装了两个 python,一个是 Windows,另一个是 WSL。开发人员声明 here 您“可以直接从 WSL 命令行调用 Windows 二进制文件”,但是,当我尝试调用 python.exe 文件时,我得到以下奇怪的行为:

myprompt$ python.exe
1
2 
print("test")
print "test"
    File "<stdin>", line 4
        print "test"
                   ^
SyntaxError: Missing parentheses in call to 'print' 
myprompt$

如果交互式解释器正在运行,我会得到:

myprompt$ python.exe
>>>1
1
>>>2 
2
print("test")
test
print "test"
    File "<stdin>", line 1
        print "test"
                   ^
SyntaxError: Missing parentheses in call to 'print' 
myprompt$

它就像解释器正在运行,但它没有给我提示,它在第一个错误时退出。有趣的是,如果我导航到同一目录并从 Windows 命令提示符运行 python.exe,一切正常。

P.S.:我通过在 Python 中运行 sys.executable 命令找到了 Windows Python 安装的位置。

【问题讨论】:

  • 除非问题特别需要,否则请不要发布图片,而是复制并粘贴文本。话虽如此,这看起来相当简单,您正在尝试在 python 3 上运行旧的 python 2 代码。
  • 问题不是为什么会弹出错误,问题是 >>> 提示到哪里去了?为什么我没有从格式正确的 print("test") 中得到任何输出??输入 python.exe 不应该启动交互式解释器吗?
  • 看起来您的可执行文件正在获取启动脚本的参数。脚本完成后,您将不再收到提示。
  • @creyD 这正是它看起来的样子,但是为什么从 WSL 和 powershell 中调用 python.exe 会产生不同的行为(以及如何解决它)?
  • 在我看来像是子系统中的一个错误或巨大的错误配置...我在我的计算机上尝试了它,它可以正常工作...

标签: python windows-subsystem-for-linux


【解决方案1】:

使用-i 选项调出交互式解释器。于是跑了

python.exe -i

将从 WSL 以交互方式启动 windows 版本的 python。

【讨论】:

  • 所以-i 使它可以根据需要进行交互,但我遇到了其他奇怪的问题。我还需要包含-u(无缓冲),否则它不会立即打印并且会有其他奇怪的行为。我还发现我无法使用 Windows python 运行 python 文件,这些文件只是 wsl 的一部分,而不是 windows 的正常文件系统。
猜你喜欢
  • 2019-03-25
  • 2016-02-18
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2012-08-20
  • 2013-12-27
相关资源
最近更新 更多