2012-11-22 108 views
0

我無法在CentOS中用python 2.7打開bash shell,我可以在python 2.6.6 Debian中這樣做。什麼改變了?Python Popen無法在CentOS/Red Hat中打開bash shell

我想一個簡單的bash進程替換:

from subprocess import Popen 
cmd="""cat <<'EOF' 
this is 
test $unchanged 
EOF 
""" 
Popen('cat <(%s)' % cmd, shell=True, executable='/bin/bash') 

在Debian的這部作品,在CentOS的它並不:

/bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `cat <(cat <<'EOF'' 

的區別是:

  • 的Debian:Python 2.6.6,/bin/sh由破折號提供。
  • CenOS(紅帽):Python 2.7版,/bin/sh是bash的

所以在CentOS的的executable=/bin/bash沒有被根本榮幸提供。 我錯過了什麼嗎?

+0

嘗試將'cat <(%s)'%cmd'替換爲'cmd'。 – werehuman

+0

@werehuman這是測試看bash是否正在啓動,'sh'可以做重定向,但不能處理替換,我需要一些不同的東西。 – estani

+0

好的,如果你在參數中寫入/ bin/bash會怎樣? ''Popen(['/ bin/bash','-c','cat <(%s)'%cmd])'' – werehuman

回答

0

如果你在參數中寫入/ bin/bash會怎麼樣?

Popen(['/bin/bash', '-c', 'cat <(%s)' % cmd]) 
+0

非常感謝,這個作品。我希望有人能指出爲什麼這是Python 2.7所必需的 - 紅帽子。 – estani

+0

可能是因爲輸入重定向是shell的工作,bash在你的情況下? – anishsane