gpt4 book ai didi

python - 另一个作业不接受在 Python 脚本中生成的换行符

转载 作者:IT王子 更新时间:2023-10-29 01:25:47 26 4
gpt4 key购买 nike

我有一个应用程序的特定组合,其中它的某个部分接受来自文件的一堆参数。我使用的所有东西都是基于 Linux 的。

问题是,我的工作管道中有些东西不喜欢换行符。一方面,我写了一个这样的脚本:

with open(job_script_file, 'w') as f:
f.write("parameter 1 goes here\n")
f.write("parameter 2 goes here\n")
f.write("python script call plus arguments here")

但是,除非我在运行前手动编辑作业脚本,否则这些参数会被作业管理器拒绝。如果我手动打乱换行符,做一些修改,它就可以工作。如果我根本不进行手动编辑(直接从 python 脚本),它就不起作用。

对于为什么这个换行符(或者可能是完全不同的东西)没有被 csh 作业脚本正确接受/读取,有什么建议吗?


我尝试的一件事是使用 sed -i 就地编辑文件并在 python 调用之前添加一个空行:

sed -i 's/^python/\n\python/g'

虽然这编辑了文件,但问题仍然存在。

更新:根据评论中的要求,一个有效文件的头/尾十六进制转储(在手动编辑文件后):

od -xc <working_file> | head -15
0000000 2123 622f 6e69 632f 6873 2d20 0a66 5323
# ! / b i n / c s h - f \n # S
0000020 4142 4354 2048 2d2d 6f6a 2d62 616e 656d
B A T C H - - j o b - n a m e
0000040 573d 3056 5f31 3032 3431 3730 3931 315f
= W V 0 1 _ 2 0 1 4 0 7 1 9 _ 1
0000060 3230 3030 3031 3230 3946 3344 3045 5f30
0 2 0 0 1 0 0 2 F 9 D 3 E 0 0 _
0000100 3031 3032 3130 3030 3133 3634 3130 3030
1 0 2 0 0 1 0 0 3 1 4 6 0 1 0 0
0000120 322d 3130 3037 3033 2d36 6574 7473 6a5f
- 2 0 1 7 0 3 0 6 - t e s t _ j
0000140 626f 230a 4253 5441 4843 2d20 6e2d 646f
o b \n # S B A T C H - - n o d
0000160 7365 313d 230a 4253 5441 4843 2d20 632d

od -xc <working_file> | tail -10
i n : : 1 0 2 0 0 1 0 0 3 1 4 6
0007140 3130 3030 3520 3030 3733 3238 3432 3231
0 1 0 0 5 0 0 3 7 8 2 2 4 1 2
0007160 3a30 6a3a 696f 3a6e 353a 3030 3733 3339
0 : : j o i n : : 5 0 0 3 7 9 3
0007200 3337 3131 2030 3222 3130 2d34 3730 312d
7 3 1 1 0 " 2 0 1 4 - 0 7 - 1
0007220 2239 000a
9 " \n
0007223

对于非工作文件也是如此:

od -xc <non-working_file> | head -15
0000000 2123 622f 6e69 632f 6873 2d20 0a66 5323
# ! / b i n / c s h - f \n # S
0000020 4142 4354 2048 2d2d 6f6a 2d62 616e 656d
B A T C H - - j o b - n a m e
0000040 573d 3056 5f31 3032 3431 3630 3731 315f
= W V 0 1 _ 2 0 1 4 0 6 1 7 _ 1
0000060 3230 3030 3031 3230 3844 4644 3035 5f30
0 2 0 0 1 0 0 2 D 8 D F 5 0 0 _
0000100 3031 3032 3130 3030 3233 3241 3132 3030
1 0 2 0 0 1 0 0 3 2 A 2 2 1 0 0
0000120 322d 3130 3037 3033 2d36 6574 7473 6a5f
- 2 0 1 7 0 3 0 6 - t e s t _ j
0000140 626f 230a 4253 5441 4843 2d20 6e2d 646f
o b \n # S B A T C H - - n o d
0000160 7365 313d 230a 4253 5441 4843 2d20 632d


od -xc <non-working_file> | tail -10
n : : 1 0 2 0 0 1 0 0 3 2 A 2 2
0007140 3031 2030 3035 3330 3536 3037 3136 3038
1 0 0 5 0 0 3 6 5 7 0 6 1 8 0
0007160 3a3a 6f6a 6e69 3a3a 3035 3330 3837 3833
: : j o i n : : 5 0 0 3 7 8 3 8
0007200 3134 3035 2220 3032 3431 302d 2d36 3731
4 1 5 0 " 2 0 1 4 - 0 6 - 1 7
0007220 0022
"
0007221

最佳答案

在您编辑之后,问题现在很清楚了:非工作文件 只是在命令后缺少一个换行符(工作文件< 中的最后一个 \n/em>)。修复现在很容易,只需在最后一次写入时添加它:

with open(job_script_file, 'w') as f:
f.write("parameter 1 goes here\n")
f.write("parameter 2 goes here\n")
f.write("python script call plus arguments here\n") # \n to cleanly end the command

由于最后一行没有换行,job manager认为是未完成,无法处理。大多数编辑器始终强制在文本文件末尾换行,这解释了为什么文件的任何版本都会生成工作文件

关于python - 另一个作业不接受在 Python 脚本中生成的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697153/

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