gpt4 book ai didi

python - 从 Python 中创建并执行 tcsh 脚本

转载 作者:行者123 更新时间:2023-12-01 05:50:39 25 4
gpt4 key购买 nike

我正在尝试从 python 构建并执行 csh 脚本。

我生成的代码看起来像是正确的脚本,并且 os.system("my_script.csh") 返回“0”,但脚本不执行其中的任务 < em>除非我使用vim手动进入它并重新保存它(手动更改脚本中的任何内容 - 我什至不进入“插入”模式)。在 vim 中重新保存是做什么的,而我的代码中没有这样做,是否可以做到这一点?

这是我的代码的相关部分:

grabmeName = '%sgrabme%s.csh'%(dirNames['grabmes'],uniqID)
if not os.path.exists(grabmeName):
open(grabmeName,'w').close()
os.chmod(grabmeName,0777)
with open(grabmeName,'a') as f:
f.write("#!/bin/csh -f\n")
f.write("echo 'hello'")
os.system(grabmeName)

最佳答案

主要问题是 shell 中的每一行都需要以 \n 结尾才能执行,甚至是最后一行。您只需将 \n 添加到 "echo 'hello'" 字符串的末尾即可。这可以说是 csh 中的一个错误,因为 bash 和 friend 没有这个问题,但如果你想使用 csh,你'我必须适应它。

当你在 vim 中保存文本文件时,如果文件一开始就没有换行符,它会在文件中添加一个尾随换行符。您可以通过预先保存文件的副本并运行 diff 来查看 vim 的更改来验证这一点:

$ cat blah-grabme-12.csh 
#!/bin/csh -f
echo 'hello'$ cp blah-grabme-12.csh blah-grabme-12.csh.orig
$ vim blah-grabme-12.csh
┌────────────────────────────────────────────────────────────────────────────────┐
│#!/bin/csh -f │
│echo 'hello' │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│~ │
│:wq❚ │
└────────────────────────────────────────────────────────────────────────────────┘
$ diff -u blah-grabme-12.csh.orig blah-grabme-12.csh.orig
--- blah-grabme-12.csh.orig
+++ blah-grabme-12.csh
@@ -1,2 +1,2 @@
#!/bin/csh -f
-echo 'hello'
\ No newline at end of file
+echo 'hello'

如果您愿意,您可以在 ~/.vimrc 中关闭 vim 的这种行为。请参阅:help 'eol'在 vim 帮助中。

另一个潜在的问题是 system(filename) 仅当 filename 是非裸路径时才有效,即具有 /在其中 - 或者如果 . 在系统 $PATH.

此外,通过使用os.open()您可以在文件创建时设置文件权限,而不是 open()。在这里它可能不会产生很大的差异,但在许多情况下,创建文件然后更改其权限会导致 security vulnerabilityThis stackoverflow question展示了如何做到这一点。

<小时/>

把它们放在一起,你会得到这样的结果:

import os
import os.path

grabmeName = 'blah-grabme-12.csh'

with os.fdopen(os.open(grabmeName, os.O_WRONLY | os.O_CREAT, 0700), 'w') as f:
f.write("#!/bin/csh -f\n")
f.write("echo 'hello'\n")
os.system(os.path.abspath(grabmeName))

关于python - 从 Python 中创建并执行 tcsh 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com