繁体   English   中英

在Ubuntu中执行python脚本默认为shell而不是bash

[英]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正在调用subshel​​l。 您需要使用以下类似内容,才能将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM