PowerShell中执行py命令后如何不创建文件直接运行后续Python代码
问题原因
你当前的写法存在两个层级的执行逻辑错误:
- PowerShell会按行依次执行函数内的命令:第一行
py会直接启动Python交互解释器,进程进入阻塞状态,直到你手动退出Python后才会执行下一行代码,后续的print语句根本不会传递给Python运行。 - PowerShell自身也内置了
print命令,作用是向系统打印设备输出内容,你退出Python后PowerShell执行这行原生命令时找不到对应打印设备,就会抛出Unable to initialize device PRN的报错。
解决方案
不需要创建额外文件,直接通过Python的内置参数传递代码即可,有两种常用写法:
方法1:使用-c参数传递代码
Python的-c参数支持直接传入字符串形式的代码执行,单/多行代码都可以适配:
- 单行代码写法:
function test { py -c "print('hello world')" }
- 多行代码写法(用PowerShell的多行 heredoc 字符串包裹即可):
function test { py -c @" a = 10 b = 20 print(f'计算结果:{a + b}') print('hello world') "@ }
如果你的Python代码中包含$符号,不想被PowerShell解析为变量,可以把包裹符换成单引号格式的@' '@,不会触发变量解析。
方法2:通过管道传递代码给标准输入
如果代码量较大,也可以把代码通过管道传给Python,配合-参数让Python从标准输入读取代码执行:
function test { @' a = 10 b = 20 print(f'计算结果:{a + b}') print('hello world') '@ | py - }
内容的提问来源于stack exchange,提问作者Tuor
相关产品推荐
相关产品推荐

