【发布时间】:2025-12-25 05:20:08
【问题描述】:
对于那些对我为什么这样做感到好奇的人:我需要 tar 球中的特定文件 - 不多也不少。我必须为make check 编写单元测试,但由于我被限制为“没有更多”文件,我必须在make check 中编写检查。这样,我不得不写bash(但我不想)。
我不喜欢使用 bash 进行单元测试(对不起所有喜欢 bash 的人。我只是非常不喜欢它,以至于我宁愿采用一种极其 hacky 的方法也不愿编写多行 bash 代码),所以我写了一个 python文件。后来我了解到,由于一些未知的严格规则,我必须使用 bash。我想有一种方法可以将 python 文件的全部内容缓存到 bash 文件中的单个字符串中,因此我可以将 bash 中的字符串文字写入 python 文件然后执行它。
我尝试了以下尝试(在以下脚本和结果中,我使用了另一个不是 unit_test.py 的 python 文件,所以如果它实际上看起来不像单元测试,请不要担心):
toStr.py:
import re
with open("unit_test.py", 'r+') as f:
s = f.read()
s = s.replace("\n", "\\n")
print(s)
然后我使用管道输出结果:
python toStr.py > temp.txt
它看起来像:
#!/usr/bin/env python\n\nimport os\nimport sys\n\n#create number of bytes as specified in the args:\nif len(sys.argv) != 3:\n print("We need a correct number of args : 2 [NUM_BYTES][FILE_NAME].")\n exit(1)\nn = -1\ntry:\n n = int(sys.argv[1])\nexcept:\n print("Error casting number : " + sys.argv[1])\n exit(1)\n\nrand_string = os.urandom(n)\n\nwith open(sys.argv[2], 'wb+') as f:\n f.write(rand_string)\n f.flush()\n f.close()\n\n
我尝试将其作为字符串文字并将其回显到一个新文件中,看看我是否可以将它作为 python 文件运行,但它失败了。
echo '{insert that giant string above here}' > new_unit_test.py
我想把上面的这个语句复制到我的“bash 单元测试”文件中,这样我就可以在 bash 脚本中执行 python 文件了。
生成的文件看起来完全像{在此处插入巨型字符串}。我在尝试中做错了什么?还有其他更简单的方法可以让我将 python 文件作为字符串文字保存在 bash 脚本中吗?
【问题讨论】:
-
看来你想做的任何事情都可能不是最好的方法......
-
您说得对,先生!因此,我正在询问我必须“使用 bash”但实际上不使用 bash 的其他简单方法。
-
为什么要“使用 bash”?
-
在帖子中回答 - 必须做一些 makefile 的东西。
-
但是严格的规范说 Makefile 必须存在。它必须是一个makefile。我不能在 tar 球中有物理 python 文件。我的 python 脚本中确实有运行 bash 的子进程模块,但我想这不是重点。接口是他们会调用
make check。
标签: python bash shell makefile