为什么python允许bash脚本在不可执行的情况下运行?
我有一个简单的bash脚本,它运行“apt update”,我试图通过python这样调用它。虽然我没有为什么python允许bash脚本在不可执行的情况下运行?,python,bash,pyqt4,Python,Bash,Pyqt4,我有一个简单的bash脚本,它运行“apt update”,我试图通过python这样调用它。虽然我没有chmod+xupdate.shIt,但它仍在运行 def updateUsingBash(self): p = QtCore.QProcess() p.finished.connect(self.onFinished) p.start('sh', ['update.sh']) p.waitForFinished(-1) def onFinished(self
chmod+xupdate.sh
It,但它仍在运行
def updateUsingBash(self):
p = QtCore.QProcess()
p.finished.connect(self.onFinished)
p.start('sh', ['update.sh'])
p.waitForFinished(-1)
def onFinished(self, exit_code, exit_status):
print "script finished with exit code :", exit_code
这与
python foo.py
运行foo.py
时没有将后者标记为可执行的方式完全相同——它只是一个包含脚本文本的数据文件,正在执行的是python
或sh
,分别。这与python foo.py
运行foo.py
时没有将后者标记为可执行文件的方式完全相同——它只是一个包含脚本文本的数据文件,正在执行的东西分别是python
或sh
。您没有执行update.sh
。您执行了sh
并将其作为参数传递给update.sh
。这使得sh
将update.sh
解释为shell脚本
顺便说一句,请注意sh
与未执行update.sh
的bash
不完全相同。您执行了sh
并将其作为参数传递给update.sh
。这使得sh
将update.sh
解释为shell脚本
顺便说一下,请注意,
sh
与bash
sh update不完全一样。sh
告诉sh
将update.sh
作为包含要运行的文本的数据文件读取。这在任何地方都不涉及Python的情况下是正确的。这与Python foo.py
运行foo.py
时没有可执行性是一样的。您没有执行update.sh
。您正在执行的sh
sh
不是“使用bash”sh
是POSIX sh(关于现代系统,70年代的伯恩关于古代系统)<代码>bash是bash。即使sh
是指向bash
的符号链接,当这样调用时,它也会在POSIX兼容模式下运行。@CharlesDuffy,感谢您解释sh update。sh
告诉sh
将update.sh
读取为包含要运行的文本的数据文件。这在任何地方都不涉及Python的情况下是正确的。这与Python foo.py
运行foo.py
时没有可执行性是一样的。您没有执行update.sh
。您正在执行的sh
sh
不是“使用bash”sh
是POSIX sh(关于现代系统,70年代的伯恩关于古代系统)<代码>bash是bash。即使sh
是指向bash
的符号链接,当这样调用时,它也会在POSIX兼容模式下运行。@CharlesDuffy,感谢您的解释