[英]Executing a python script in Ubuntu defaults to shell and not bash
我在Ubuntu中运行python脚本,该脚本依赖于要安装的软件包。 这些都已安装,因为我可以调用它们,但是脚本不能。
我认为这是因为脚本使用的是shell(sh)而不是bash版本。我收到以下错误消息:
sh: genomeCoverageBed: command not found
但可以在Bash中手动调用基因组覆盖:
ubuntu@fat:~/jonathan/scripty$ genomeCoverageBed
Tool: bedtools genomecov (aka genomeCoverageBed)
Version: v2.26.0
Summary: Compute the coverage of a feature file among a genome.
我的Stackoverflow问题的这一部分是误导和错误的!:
我已经将此shebang添加到我的python脚本的开头:
#!/ bin / bash
但这并没有影响结果,
从脚本中删除该脚本仍会导致相同的错误消息,这是脚本的一部分:
for filename in os.listdir(folder):
if filename.endswith(".sorted.bam"):
namefile = filename.replace(".sorted.bam", "_ncoverage.txt")
folder_name = filename.replace(".sorted.bam", "")
os.system("mkdir " + folder_name)
os.system("coverageBed -s -d -a bam " + folder + filename + " -b " + gff_file + " > " + folder_name + "/" + namefile)
这是我运行此脚本时发生的情况:
ubuntu@fat:~/jonathan/script$ sudo python2.7 script1.py ./Folder/ ./Folder/ref.fasta genbank.gff
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: coverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
sh: genomeCoverageBed: command not found
您是否对我的工作有任何建议,或者即使我处在正确的轨道上? 谢谢你的帮助!
您使用的是错误的shebang
#!/bin/bash
当要求Linux shell运行文本文件(例如./myprogram.py
)时,它将查看shebang以确定应使用哪个程序来解释文本。 在您的情况下,您要求外壳程序运行/bin/bash
另一个外壳程序,它试图将python脚本解释为外壳程序脚本。
你可以用不同的方式写shebang
#!/usr/bin/env python3
这告诉外壳程序运行/usr/bin/env
,它将在PATH中搜索名为pythnon3
。 现在,您为当前环境运行python安装程序。 默认情况下,它是系统python,但是如果您在python虚拟环境中运行,它将运行该 python。
shebang仅在linuxy系统上使用,仅在使脚本可执行并直接运行它时使用。 如果在Windows(cygwin或其他类似Unix的外壳程序之外)上运行或直接运行python( python /path/to/myscript.py
),则不使用它。
正如评论中提到的@tdelaney一样,您的shebang正在调用subshell。 您需要使用以下类似内容,才能将python用作执行该文件的程序:
#! /usr/bin/env python
如果您输入#!/ bin / bash,Ubuntu将不会在python中运行python文件,该文件将在bash中打开。 尝试放入#!/ usr / bin / python或#!/ usr / bin / env python
我关注了这篇文章:
https://unix.stackexchange.com/questions/83191/how-to-make-sudo-preserve-path
并添加:
sudo env“ PATH = $ PATH”
到我的命令开始,这解决了我的问题!
感谢所有的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.