我想使用xonsh
对目录中的所有md
文件执行pandoc
。我可以使用subprocess
,但这在^{
from glob import glob
import os
for fn in glob('*.md'):
bname, _ = os.path.splitext(fn)
pandoc $fn > ${bname}.html
我得到了一个SyntaxError
:
SyntaxError: :3:11: ('code: $fn',) pandoc $fn > ${bname}.html
如果我将最后一行改为:pandoc $fn > $bname.html
,我得到:
pandoc: $fn: openBinaryFile: does not exist (No such file or directory)
我假设问题是for
循环内部是Python模式,但是pandoc
调用必须处于子进程模式。这是怎么做到的?在
我相信我已经找到了答案,似乎为了在
for
循环中激活subprocess-mode
,可以使用$[]
语法显式地使用$[]
语法来激活subprocess-mode
:为了让python变量传播到子进程中,似乎需要将它们声明为
$varname
。在如果希望Python变量对子进程可用(在隐式的xonsh意义上),可以将它们包装在
@()
中。 此外,还有一个内置的glober语法,因此您可以编写如下过程:请注意,}都应该包装在
fn
和{@()
中,因为它们是子程序中的python变量(因为您调用了命令行函数来启动行)。在另外,您不需要使它们成为环境变量,除非您希望显式需要设置envvars的其他程序可以使用它们。在
希望有帮助!在
相关问题 更多 >
编程相关推荐