2017-04-03 109 views
1

我試圖從Python文件運行SH-腳本從Python文件運行SH,語法錯誤

my_script.sh

#!/usr/bin/python 

rm category.xml 

Python文件

import subprocess 
subprocess.call(["../my_script.sh"]) 

我也得到

File "../my_scrypt.sh", line 3 
    rm category.xml 
      ^
SyntaxError: invalid syntax 

如何解決這個問題?

回答

1

看看你的shell代碼。你使用python解釋器#!/usr/bin/python並用bash命令rm category.xml提供它。

固定shell腳本:

#!/bin/bash 

rm category.xml 
+0

bash和sh有區別。然而,它需要'#!/ bin/sh' – LethalProgrammer

+0

這取決於代碼,我認爲'rm'只是爲了測試。 sh不支持bash的許多有用功能,但它是可移植的。至於我,我從來沒有在現代linux系統上遇到任何問題,只有高級語法才能受益。 –

4

您在非Python文件上使用了#!/usr/bin/python的shebang行。改變shebang線。

更重要的是,不叫出來shell腳本的時候可以調用Python函數做同樣的事情:

import os 
os.remove("category.xml") 
+0

我有家當線,my_script.sh '#!/ usr/bin/python rm category.xml' – Headmaster

+0

是的:這是錯誤的:你說要用Python運行該文件。這不是Python。 –

+0

現在我明白了,謝謝 – Headmaster

0

如果你使用python的2倍

使用命令模塊:

import commands 
print commands.getoutput('sh my_script.sh') 

如果使用python 3倍

使用子模塊:

import subprocess 
print(subprocess.getoutput('sh my_script.sh')) 
+0

自Python 2.4起''subprocess'已經可用,並且Python 2.6中已經棄用'commands'(說實話,我從來沒有聽說過它)。 – chepner

0

試試這個,

my_script.sh

#!/usr/bin/sh 

rm category.xml 

瑣碎的方法:

>>> import subprocess 
>>> subprocess.call(['./my_script.sh']) 
>>>