[英]passing argument to python from shell script
我遇到了一些类似的问题,但是似乎都没有回答我的疑问,我正在尝试将参数从bash脚本传递给python脚本。 我没有看到错误,也没有得到所需的输出。 我在这里做错了什么?
蟒蛇:
import os
import glob
import unicodecsv as csv
import pandas as pd
import codecs
import sys
OUTPUT_PATH=sys.argv[2]
def createFolder(directory):
# print('createFolder')
try:
if not os.path.exists(directory):
# print('createFolder')
os.makedirs(directory)
# print(directory)
except OSError:
print ('Error: Creating directory. ' + directory)
createFolder(OUTPUT_PATH + 'csv20_out/')
bash脚本:
INPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'
OUTPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/'
cd /
cd home/pg/Documents/LMS/kanjiforbeginner/convertToYAML/
cd converts_csv642csv20
python csvFile.py $INPUT_PATH $OUTPUT_PATH
应该创建一个文件夹csv20_out
当我打印OUTPUT_PATH时,得到“ home / pg / Public / test_data / test0002_2files_to_1flow /”
sys.argv的内容如下所示:
['csvFile.py', 'inputPath', 'outputPath']
要获得outputPath,您需要访问sys.argv [2]。
按照惯例,第一个参数是程序本身的名称,即在命令行上指定的第一件事( whatever_name.py
)。
因此argv[0]
是程序的名称, argv[1]
是您的输入路径,而argv[2]
是您的输出路径。
因此,正如其他评论者所指出的那样,您需要使用argv[2]
而不是argv[1]
这是因为在bash中argv[0]
是正在执行的python脚本,而argv[1]
在您的情况下变为'$INPUT_PATH'
但是,那不会解决您的问题。 在脚本中,您需要删除'
周围的$INPUT_PATH
和$OUTPUT_PATH
以便最后一行成为
python csvFile.py $INPUT_PATH $OUTPUT_PATH
'$INPUT_PATH'
将string
$INPUT_PATH
发送到您的python脚本,而
$INPUT_PATH
发送'home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'
或您选择分配给$INPUT_PATH
任何值
最后,您需要更改$INPUT_PATH
和$OUTPUT_PATH
的值
INPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'
OUTPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/'
需要成为
INPUT_PATH='/home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'
OUTPUT_PATH='/home/pg/Public/test_data/test0002_2files_to_1flow/'
开头的/
会提供目录或文件的完整路径,如果您不使用/
那么它将成为相对路径。
在bash脚本中,您正在使用cd
导航文件夹,即文件夹
'home/pg/Public/test_data/test0002_2files_to_1flow/csv_out'
将在目录下创建,
home/pg/Documents/LMS/kanjiforbeginner/convertToYAML/
如前所示,在$INPUT_PATH
和$OUTPUT_PATH
的开头添加/
可以确保您的代码:
编辑:
就像Kim在下面建议的那样,脚本的最后一行应该是:
python csvFile.py "$INPUT_PATH" "$OUTPUT_PATH"
这是在$INPUT_PATH
或$OUTPUT_PATH
带有空格或特殊字符的情况下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.