2011-11-22 67 views
3

在ipython(0.10.2)中,我想运行bash shell样式(或glob.glob)扩展。我想要做一些这样的事情,让争论扩大化,就像他们会在bash中一样。这可能吗?从ipython运行glob风格扩展?

filenames = !ls *.sbet 
run sbet.py $filenames 
# fails because filenames is a list 

# or the simpler case: 
run sbet.py *.sbet 
# failes with "*.sbet" being directly passed in without being expanded. 

建议?谢谢!

回答

7

filenames = !ls *.sbet返回是一个特殊列表,有一些额外的属性:

  • filenames.l - 列表
  • filenames.s - 一个空格分隔字符串
  • filenames.n - 换行分隔字符串

做​​在IPython的更多信息。

所以要通过运行指定参数时,你想filenames.s

filenames = !ls *.sbet 
run sbet.py $filenames.s 

如果你有一个常规的列表,那么你就需要自己把它变成一个字符串,传递给运行之前:

filenames = glob.glob('*.sbet') 
filenames_str = ' '.join(filenames) # you will need to add quotes if you allow spaces in filenames 
run sbet.py $filenames_str 

如果run foo.py *.sbet对您很有价值,那么您可以在传递到%run时自动扩展文件球体的feature request

+0

太棒了,不知道这个关于ipython! :)(要找到所有很酷的东西的一些参考) –

+0

我刚刚在http://ipython.org/ipython-doc/dev/interactive/shell.html看到,也有.p选项,以获得结果为某种“路径对象”,尽管我不知道这意味着什么。 –