我对此仍不熟悉,但是否可以使用列表理解语法在xonsh中执行多个命令?
我希望下面的内容可以创建5个文件( file00 to file04 ),但它却出错了:
$ [@(['touch', 'file%02d' % i]) for i in range(5)]
............................
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
File "<string>", line None
SyntaxError: <xonsh-code>:1:1: ('code: @(',)
[@(['touch', 'file%02d' % i]) for i in range(5)]
^我认为这是可行的,因为下面的工作很好:
$ [i for i in range(5)]
[0, 1, 2, 3, 4]
$ @(['touch', 'file%02d' % 3])
$ ls
file03发布于 2018-05-19 14:18:34
最接近原始代码的方法是使用子进程:
[$[touch @('file%02d' % i)] for i in range(5)]
解释嵌套$[ .. @(的必要性
touch),因此我们需要使用$[ (或捕获输出的$( )进入子进程模式;@(。发布于 2018-05-18 16:50:02
看起来你找到了一种方法来做这件事--有时候特定子进程命令的行为会影响你把它放在一起的方式。
在touch的例子中,由于它可以使用多个参数,所以在列表理解中(我可以想到)最简单的方法是这样做。
touch @([f'file_{i}' for i in range(5)])
发布于 2018-05-18 15:38:38
我已经快到了,有必要进一步包装命令:
$ [ $(@(['touch', 'file%02d' % i])) for i in range(5)]其原因如下:
touch),因此我们需要使用$(进入子进程模式。@(。https://stackoverflow.com/questions/50414586
复制相似问题