Python 2.7 argsparse,路径为args

时间:2018-01-27 20:36:02

标签: python-2.7 filepath argparse

我想给我的程序一个文件路径,但如果有/包含它就不喜欢它。我怎样才能说服python我的路径只有一个参数

01-28 06:15:29.817 5620-5739/com.judemark.triber.driverapp E/MPlugin: Unsupported class: com.mediatek.common.telephony.IOnlyOwnerSimSupport
01-28 06:15:30.126 5620-5620/com.judemark.triber.driverapp E/Minikin: addFont failed to create font /system/fonts/Padauk.ttf
01-28 06:15:30.248 5620-5620/com.judemark.triber.driverapp E/Minikin: addFont failed to create font /system/fonts/NanumGothic.ttf
01-28 06:15:30.251 5620-5620/com.judemark.triber.driverapp E/Minikin: addFont failed to create font /system/fonts/DroidSansFallback.ttf
01-28 06:15:30.251 5620-5620/com.judemark.triber.driverapp E/Minikin: addFont failed to create font /system/fonts/MTLmr3m.ttf
01-28 06:15:30.597 5620-5620/com.judemark.triber.driverapp E/MultiWindowProxy: getServiceInstance failed!
01-28 06:15:31.138 5620-5798/com.judemark.triber.driverapp E/GED: Failed to get GED Log Buf, err(0)
01-28 06:15:31.616 5620-5800/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f765eb680 cert_verify_callback x509_store_ctx=0x7f618579f0 arg=0x0
01-28 06:15:31.616 5620-5800/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f765eb680 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_RSA
01-28 06:16:01.626 5620-5620/com.judemark.triber.driverapp E/MultiWindowProxy: getServiceInstance failed!
01-28 06:16:02.729 5620-7093/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f65a74b00 cert_verify_callback x509_store_ctx=0x7f49332220 arg=0x0
01-28 06:16:02.729 5620-7093/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f65a74b00 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_ECDSA
01-28 06:16:04.864 5620-7095/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f5e659d80 cert_verify_callback x509_store_ctx=0x7f49128260 arg=0x0
01-28 06:16:04.865 5620-7095/com.judemark.triber.driverapp E/NativeCrypto: ssl=0x7f5e659d80 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_ECDSA
01-28 06:16:07.272 5620-5620/com.judemark.triber.driverapp E/UncaughtException: com.google.maps.api.android.lib6.common.apiexception.b: Failed to decode image. The provided image must be a Bitmap.
                                                                                at com.google.maps.api.android.lib6.impl.m.a(:com.google.android.gms.DynamiteModulesB@11975448:12)
                                                                                at com.google.maps.api.android.lib6.impl.n.a(:com.google.android.gms.DynamiteModulesB@11975448:7)
                                                                                at com.google.maps.api.android.lib6.impl.cz.<init>(:com.google.android.gms.DynamiteModulesB@11975448:25)
                                                                                at com.google.maps.api.android.lib6.impl.ba.a(:com.google.android.gms.DynamiteModulesB@11975448:487)
                                                                                at com.google.android.gms.maps.internal.k.onTransact(:com.google.android.gms.DynamiteModulesB@11975448:94)
                                                                                at android.os.Binder.transact(Binder.java:392)
                                                                                at com.google.android.gms.internal.zzeu.zza(Unknown Source)
                                                                                at com.google.android.gms.maps.internal.zzg.addMarker(Unknown Source)
                                                                                at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
                                                                                at com.judemark.triber.driverapp.Welcome$2.onComplete(Welcome.java:213)
                                                                                at com.firebase.geofire.GeoFire$2.onComplete(GeoFire.java:175)
                                                                                at com.google.android.gms.internal.zzeek.run(Unknown Source)
                                                                                at android.os.Handler.handleCallback(Handler.java:815)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                                at android.os.Looper.loop(Looper.java:207)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5769)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
01-28 06:16:07.508 5620-5620/com.judemark.triber.driverapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.judemark.triber.driverapp, PID: 5620
                                                                         com.google.maps.api.android.lib6.common.apiexception.b: Failed to decode image. The provided image must be a Bitmap.
                                                                             at com.google.maps.api.android.lib6.impl.m.a(:com.google.android.gms.DynamiteModulesB@11975448:12)
                                                                             at com.google.maps.api.android.lib6.impl.n.a(:com.google.android.gms.DynamiteModulesB@11975448:7)
                                                                             at com.google.maps.api.android.lib6.impl.cz.<init>(:com.google.android.gms.DynamiteModulesB@11975448:25)
                                                                             at com.google.maps.api.android.lib6.impl.ba.a(:com.google.android.gms.DynamiteModulesB@11975448:487)
                                                                             at com.google.android.gms.maps.internal.k.onTransact(:com.google.android.gms.DynamiteModulesB@11975448:94)
                                                                             at android.os.Binder.transact(Binder.java:392)
                                                                             at com.google.android.gms.internal.zzeu.zza(Unknown Source)
                                                                             at com.google.android.gms.maps.internal.zzg.addMarker(Unknown Source)
                                                                             at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
                                                                             at com.judemark.triber.driverapp.Welcome$2.onComplete(Welcome.java:213)
                                                                             at com.firebase.geofire.GeoFire$2.onComplete(GeoFire.java:175)
                                                                             at com.google.android.gms.internal.zzeek.run(Unknown Source)
                                                                             at android.os.Handler.handleCallback(Handler.java:815)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                             at android.os.Looper.loop(Looper.java:207)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5769)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
01-28 06:16:08.644 5620-7155/? E/NativeCrypto: ssl=0x7f457f5200 cert_verify_callback x509_store_ctx=0x7f35dbe350 arg=0x0
01-28 06:16:08.644 5620-7155/? E/NativeCrypto: ssl=0x7f457f5200 cert_verify_callback calling verifyCertificateChain authMethod=ECDHE_ECDSA

没有/

   #!/usr/bin/env python
    import argparse
    parser = argparse.ArgumentParser(description='Change the option prefix characters',prefix_chars='-+/',)
    parser.add_argument('-f', action='store', dest='PathtoFile',help='PathtoFile')
    print parser.parse_args()

任何结果都会产生一个参数

argsparse.py -f banana    ->    Namespace(PathtoFile='banana')

- &GT;

argsparse.py -f /home/user/banana 
argsparse.py -f '/home/user/banana'
argsparse.py -f '//home//user//banana'
argsparse.py -f "/home/user/banana"
argsparse.py -f "//home//user//banana"

更新:谢谢匹配我忘了添加/作为前缀 改变

usage: argsparse.py [-h] [-f PATHTOFILE]
argsparse.py: error: argument -f: expected one argument

 parser = argparse.ArgumentParser(description='Change the option prefix characters',prefix_chars='-+/',)

1 个答案:

答案 0 :(得分:0)

问题是您正在使用prefix_chars='-+/' - 这告诉argparse这些字符是标记命令标记的内容。

因此,您的代码看到/等同于-并将其读取为您输入的内容:

argsparse.py -f -home/user/banana

这意味着-f没有给出论据。删除prefix_chars,它应该可以正常工作。