![](/img/trans.png)
[英]How to pipe In the xonsh shell the output of a Python construct to another command?
[英]How to run a shell command in a for loop in xonsh?
我想使用xonsh
對pandoc
中的所有md
文件執行pandoc
。 我可以使用subprocess
xonsh
,但這似乎在xonsh
是不必要的。 到目前為止,這是我嘗試過的方法:
from glob import glob
import os
for fn in glob('*.md'):
bname, _ = os.path.splitext(fn)
pandoc $fn > ${bname}.html
有了這個我得到一個SyntaxError
:
語法錯誤:: 3:11 :(“代碼:$ fn”,)pandoc $ fn> $ {bname} .html
如果將最后一行更改為: pandoc $fn > $bname.html
, pandoc $fn > $bname.html
得到:
pandoc:$ fn:openBinaryFile:不存在(沒有這樣的文件或目錄)
我以為問題是for
循環內部是Python模式,但是pandoc
調用必須處於子pandoc
模式。 應該怎么做?
如果希望Python變量可用於子流程(在隱式xonsh意義上),則可以將它們包裝在@()
。 另外,還有一個內置的globber語法,因此您可以按以下方式編寫該過程:
import os.path
for fn in g`*.md`:
_, bname = os.path.split(fn)
pandoc @(fn) > @('{}.html'.format(bname))
請注意, fn
和'{}.html'.format()
都應包裝在@()
因為它們是子過程中的python變量(因為您已經調用了命令行函數來啟動該行)。
此外,除非您希望它們可用於其他需要顯式設置envvars的程序,否則無需使它們成為環境變量。
希望有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.