无法从python shell脚本中获取bash文件的源代码

无法从python shell脚本中获取bash文件的源代码,python,bash,python-2.7,shell,tcsh,Python,Bash,Python 2.7,Shell,Tcsh,您好,我正在尝试从我的pythons脚本中获取文件源say check.setup。 代码 它说找不到命令。令人惊讶的是,我可以直接从shell中获取相同的文件。 check.setup是csh文件。它正在寻找其他的.csh文件并设置一些环境变量。我在这里看到了一些答案,但没有人可能解决这个问题。 PS:我试图编写bash文件而不是python。我还尝试使用subprocess.Popen。问题依然存在。 Aashish使用popen subprocess.Popen('source ./ful

您好,我正在尝试从我的pythons脚本中获取文件源say check.setup。 代码

它说找不到命令。令人惊讶的是,我可以直接从shell中获取相同的文件。 check.setup是csh文件。它正在寻找其他的.csh文件并设置一些环境变量。我在这里看到了一些答案,但没有人可能解决这个问题。 PS:我试图编写bash文件而不是python。我还尝试使用subprocess.Popen。问题依然存在。 Aashish使用popen

subprocess.Popen('source ./fullpathhere/check.setup', shell=True)
使用popen

subprocess.Popen('source ./fullpathhere/check.setup', shell=True)

即使你在问题中明确提到csh,为什么不把你的帖子贴上csh标签

没有可执行的namend-source(您可以通过键入
bin/which-source
来验证它)。好吧,您自己指出,这应该由csh完成,但是如果您不告诉它,Python怎么知道它需要调用csh呢

我的系统上没有csh,但如果我记得几十年前我确实使用csh进行编程的时候,你可以这样做

os.system("csh -c fullpathhere/check.setup")

事实上,我也会为skipping.cshrc指定-f标志,除非你真的也需要它的来源。

为什么不将你的帖子标记为csh,即使你在问题中明确提到csh

没有可执行的namend-source(您可以通过键入
bin/which-source
来验证它)。好吧,您自己指出,这应该由csh完成,但是如果您不告诉它,Python怎么知道它需要调用csh呢

我的系统上没有csh,但如果我记得几十年前我确实使用csh进行编程的时候,你可以这样做

os.system("csh -c fullpathhere/check.setup")


事实上,我也会为skipping.cshrc指定-f标志,除非您真的需要也获取该标志。

我不确定这是否正确(因此评论不回答),但我听说有时
source
实际上是
的别名。可能值得一看
/fullpath here/check.setup
是否作为您的命令工作。您机器上的默认shell是什么?请使用
echo$shell
查看,然后首先在
source/fullpath/check.setup
上测试此命令>直接在控制台中查看结果。源和。都是内置的shell命令,不能像这样执行。但即使可以,也没有意义,因为os.system生成了一个子shell:在该子shell中设置的任何环境变量在命令返回时退出时都会立即丢失。@Delioth我试过了{./fullpathhere/check.setup)。它不起作用。相同error@gkegoux这是tcsh。抱歉,但我不理解你的建议。你想让我用tcsh编写脚本吗?我试过bash,它给出了相同的结果。我不确定这是否正确(因此评论不是答案),但我听说有时
source
实际上是
的别名。可能值得一看
/fullpath here/check.setup
是否作为您的命令工作。您机器上的默认shell是什么?请使用
echo$shell
查看,然后首先在
source/fullpath/check.setup
上测试此命令>直接在控制台中查看结果。源和。都是内置的shell命令,不能像这样执行。但即使可以,也没有意义,因为os.system生成了一个子shell:在该子shell中设置的任何环境变量在命令返回时退出时都会立即丢失。@Delioth我试过了{./fullpathhere/check.setup)。它不起作用。相同error@gkegoux它是tcsh。很抱歉,但我不理解你的建议。你想让我用tcsh编写脚本吗?我试过bash,它给出了相同的结果。嘿,我用了Popen。(有点)。从子流程导入调用。然后调用('source./fullpath/check.setup',shell=True)。它不起作用。同样的问题
source
是一个bashism;要在POSIX sh中工作,它需要
,尽管在这一点上,仅仅使用
source
而不是
子流程.Popen(['sh','./fullpathhere/check.setup'])
(如果愿意,可以替换一个替代的解释器)没有任何
shell
参数。嘿,我使用了Popen。(有点像)。从子流程导入调用。然后调用('source./fullpath/check.setup',shell=True)。它不起作用。同样的问题
source
是一个bashism;要在POSIX sh中工作,它需要
,尽管在这一点上,仅仅使用
source
而不是
子流程.Popen(['sh','./fullpathhere/check.setup'])
(如果愿意,可以替换另一个解释器)没有任何
shell
参数。给定
system()
的实现方式,您告诉OP运行
sh-c“csh-c fullpathhere/check.setup”
。那…真的很傻。谢谢你对标记的建议。我现在已经添加了。我找不到cshell。我尝试过这样做,但问题是我没有访问该文件的权限。我甚至无权使用chmod授予权限。因此我从python脚本中创建了另一个csh文件,源于我的check.setup。我可以在创建python脚本时,对该脚本的文件权限python@Charles杜菲:在这种情况下,Python不足以省略<代码> SH <代码>进程(Perl会在这种情况下)吗?但是,即使创建了一个附加的POSIX shell进程来运行C-shell,我也不认为它是坏的。(考虑到使用操作系统的便利性)。最大的代价是正确性,而不是方便性。调用一个shell意味着您的数据需要转义才能正确解析;调用两个shell意味着它需要转义两次。而调用一个shell意味着您容易受到诸如shellshock之类的初始化时间问题的攻击。不,Python(谢天谢地!)并没有试图成为clev