GNU Parallel with Python Script - 命令行变量不起作用
GNU Parallel with Python Script - command line variables not working
这是我第一次尝试 python 在 GNU 并行中执行。
我有下面的 python 脚本。我正在尝试 运行 它与加载变量的 text.txt 文档并行。文本文档每行一个变量。
我用这段代码执行下面的脚本:
parallel --bar -a PairNames.txt python3 CreateDataTablePythonScriptv2.py
这是正在执行的 python 脚本:
import sqlite3
import sys
PairName = sys.argv[1]
print(PairName)
DTBLocation = '//mnt//c//Users//Jonathan//OneDrive - Mazars in Oman//Trading//Systems//FibMatrix//Testing Trade Analysis//SQLite//Trade Analysis.db
connection = sqlite3.connect(DTBLocation)
cursor = connection.cursor()
TableName = PairName+'_DATA'
print(TableName)
cursor.execute("""CREATE TABLE IF NOT EXISTS {}
(
Date_Time INTEGER,
Open REAL,
Max_60m_Box REAL
)""".format(TableName))
connection.commit()
connection.close()
它正确执行第一个变量就好了。但是变量的其余部分确实从 PairName 的打印命令正确打印,但是对于 print(TableName) 我得到以下显示:
GBPUSD
_DATAD
USDCHF
_DATAF
NZDJPY
_DATAY
我觉得很奇怪,它打印的 PairName 很好而且正确,但是当连接 TableName 时 PairName 没有显示。
此外,在每个数据的末尾添加一个额外的字母也很奇怪。看起来 DATA 末尾的额外字母是输入变量的最后一个字母。我不知道为什么它会砍掉 5 个字母以及它是如何把它放在数据的末尾的。
我打印了表名。
我在 https://www.youtube.com/watch?v=OpaiGYxkSuQ&ab_channel=OleTange[^] 观看了这个视频
我尝试将 TableName concat 移动到 PairName 的正下方
我打印了 PairName 的类型,它是一个字符串
我尝试用制表符和逗号分隔 txt 文档中的变量而不是下一行
我尝试将“_DATA”分配给一个变量,然后连接两个对象。但它有相同的结果:
TableEnd = '_DATA'
TableName = PairName + TableEnd
如果我删除 PairName+'_DATA' 的连接并仅将 PairName 用作 TableName,则它可以正常工作。
抱歉,如果这是一个简单的答案,但我无法弄清楚,尤其是因为在这种情况下没有太多针对 GNU Parallel 新手的文档/教程。感谢您的帮助!
输入文件不是 DOS 格式(即以 CRLF 而不是 LF 结尾)?我使用 FILE 命令检查了这个:
$ file test.txt
test.txt: ASCII text, with CRLF line terminators
$
因为是CRLF(DOS格式),我用tr:
转换了
Copy Codetr -d '\r' < input.file > output.file```
这是我第一次尝试 python 在 GNU 并行中执行。
我有下面的 python 脚本。我正在尝试 运行 它与加载变量的 text.txt 文档并行。文本文档每行一个变量。
我用这段代码执行下面的脚本:
parallel --bar -a PairNames.txt python3 CreateDataTablePythonScriptv2.py
这是正在执行的 python 脚本:
import sqlite3
import sys
PairName = sys.argv[1]
print(PairName)
DTBLocation = '//mnt//c//Users//Jonathan//OneDrive - Mazars in Oman//Trading//Systems//FibMatrix//Testing Trade Analysis//SQLite//Trade Analysis.db
connection = sqlite3.connect(DTBLocation)
cursor = connection.cursor()
TableName = PairName+'_DATA'
print(TableName)
cursor.execute("""CREATE TABLE IF NOT EXISTS {}
(
Date_Time INTEGER,
Open REAL,
Max_60m_Box REAL
)""".format(TableName))
connection.commit()
connection.close()
它正确执行第一个变量就好了。但是变量的其余部分确实从 PairName 的打印命令正确打印,但是对于 print(TableName) 我得到以下显示:
GBPUSD
_DATAD
USDCHF
_DATAF
NZDJPY
_DATAY
我觉得很奇怪,它打印的 PairName 很好而且正确,但是当连接 TableName 时 PairName 没有显示。
此外,在每个数据的末尾添加一个额外的字母也很奇怪。看起来 DATA 末尾的额外字母是输入变量的最后一个字母。我不知道为什么它会砍掉 5 个字母以及它是如何把它放在数据的末尾的。
我打印了表名。 我在 https://www.youtube.com/watch?v=OpaiGYxkSuQ&ab_channel=OleTange[^] 观看了这个视频 我尝试将 TableName concat 移动到 PairName 的正下方 我打印了 PairName 的类型,它是一个字符串 我尝试用制表符和逗号分隔 txt 文档中的变量而不是下一行
我尝试将“_DATA”分配给一个变量,然后连接两个对象。但它有相同的结果: TableEnd = '_DATA' TableName = PairName + TableEnd
如果我删除 PairName+'_DATA' 的连接并仅将 PairName 用作 TableName,则它可以正常工作。
抱歉,如果这是一个简单的答案,但我无法弄清楚,尤其是因为在这种情况下没有太多针对 GNU Parallel 新手的文档/教程。感谢您的帮助!
输入文件不是 DOS 格式(即以 CRLF 而不是 LF 结尾)?我使用 FILE 命令检查了这个:
$ file test.txt
test.txt: ASCII text, with CRLF line terminators
$
因为是CRLF(DOS格式),我用tr:
转换了Copy Codetr -d '\r' < input.file > output.file```