如何在xonsh子进程调用中正确展开shell变量
解决方案
你需要使用xonsh的Python表达式注入语法@()包裹变量,才能在子进程调用中正确展开Python侧定义的变量。
正确的代码修改
将你脚本中变量调用的行修改为如下格式即可,甚至不需要额外把Path对象转成字符串:
#!/usr/bin/env xonsh from pathlib import Path my_path = Path('/path/to/downloads/') dir_list = my_path.glob('*.zip') for my_zip in dir_list: zip_dir_names = $(zipinfo -1 @(my_zip) | grep -E '.*/$') print(zip_dir_names)
错误写法原因说明
你之前尝试的几种写法不符合xonsh的语法规则,因此无法正常展开:
- 直接写
mzip_str:会把mzip_str作为字面量字符串传给命令,而非变量值 - 写
$mzip_str:$前缀在子进程块中默认指向环境变量,不会读取你定义的Python局部变量 - 写
@mzip_str:@注入运算符必须搭配括号使用,仅写@变量名不会触发展开,会直接把@mzip_str作为字面量传参 - 写
!mzip_str:!是宏展开运算符,不符合当前变量传参的使用场景,无法识别局部变量
内容的提问来源于stack exchange,提问作者MountainX
相关产品推荐
相关产品推荐

