区分从命令提示符和 Spyder 控制台运行

Distinguish runs from Command Prompt vs Spyder console

我正在编写一个脚本,需要从命令提示符(例如 BASH)和 Spyder 的控制台中 运行。 运行 命令提示符允许脚本文件名后跟几个参数,然后可以在脚本中使用这些参数; >python script1.py dataFile.csv Results outputFile.csv。这些参数在脚本中被引用为列表 sys.argv.

的元素

我试过使用 subprocess.run("python script1.py dataFile.csv Results outputFile.csv") 让控制台像命令行一样运行,但有时它工作正常,有时它需要某些参数,比如 -f between python 和文件名,然后它会显示命令行中显示的内容。不同的计算机对此类争论是有益还是有害存在分歧。

我找了又找,找到了一些巧妙的方法来使用特定操作系统的技术细节来区分,但是有什么 Python 原生的东西我可以用吗?

如果您在控制台中导入 sys,然后调用 sys.argv,它将显示值 ['']。虽然 运行Spyder 中的脚本将该数组扩展为 ['script1.py'](加上文件地址),但它仍然不会大于一个条目。

另一方面,如果您按照上述方式从命令行 运行 脚本,则 sys.argv 的值为 ['script1.py', 'dataFile.csv', 'Results', 'outputFile.csv']。您可以利用它们之间的差异来区分不同的情况。

最好的区别是什么?您想要区分两种可能性,因此代码中最好使用 if - else 对。在一种情况下什么是真的而在另一种情况下是假的? if sys.argv 工作,因为在这两种情况下,列表至少包含一个字符串,因此在这两种情况下都有效。

if len(sys.argv) > 1 有效,它从命令行向 运行 添加了功能,并与为控制台案例编码的内容一起使用。