标签: sys

如何在python中使用sys.argv来检查参数的长度,以便它可以作为脚本运行?

好的,这是我的代码的一部分(我已经导入了sys)

if __name__ == '__main__':


MyCaesarCipher = CaesarCipher() #MyCaesarCipher IS a CaesarCipher()

if len(sys.argv) >1:
    #what will it check? 

Done = False   
while not Done:
    print('C Clear All')
    print('L Load Encrypted File')
    print('R Read Decrypted File')
    print('S Store Encrypted File')
    print('W Write Decrypted File')
    print('O Output Encrypted Text')
    print('P Print Decrypted Text')
    print('E Encrypt Decrypted Text')
    print('D Decrypted Encrypted Text')
    print('Q Quit')
    print('----------------')
    print('Enter Choice>')
Run Code Online (Sandbox Code Playgroud)

所以我要做的是,如果命令行长度大于1,则程序将作为脚本运行。

这是指令:

如果未输入命令行参数,则脚本将进入菜单模式。如果在脚本运行期间提供了多个命令行参数(脚本名称以外的任何参数),它将进入单一运行模式。

我不知道这意味着什么。

python sys python-3.x

5
推荐指数
1
解决办法
2万
查看次数

sys.stdout.encoding、locale.getpreferredencoding() 和 sys.getdefaultencoding() 之间有什么区别?

我对 python 很陌生,对这种编码的东西很困惑。到目前为止,我已经阅读了以下类型的“编码”:

import sys
import locale

print (sys.stdout.encoding)
print (locale.getpreferredencoding())
print (sys.getdefaultencoding())
Run Code Online (Sandbox Code Playgroud)

输出:

utf8
cp1252
utf-8
Run Code Online (Sandbox Code Playgroud)

有什么不同?

python encoding locale codepages sys

5
推荐指数
1
解决办法
557
查看次数

'sys.excepthook' 和多处理

我正在尝试使用带有多处理库的自定义 sys.excepthook 来处理所有线程上的异常。我知道python有一个突出的错误,它阻止了它与 Threading 库一起正常工作,并且测试表明这也会影响多处理。

导致我找到它的 Python 错误和Stackoverflow 帖子都有针对 Threading 库的解决方法,但没有针对多处理的解决方法。我试图调整解决方法以用于多处理,但仍像往常一样抛出异常。

def install_thread_excepthook():
    import sys
    start_old = multiprocessing.Process.start
    def start(*args, **kwargs):
        try:
            start_old(*args, **kwargs)
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            sys.excepthook(*sys.exc_info())
    multiprocessing.Process.start = run
Run Code Online (Sandbox Code Playgroud)

如何使 sys.excepthook 与多处理正常工作?

python multithreading sys

5
推荐指数
0
解决办法
328
查看次数

为什么 sys.stdin.read() 永久返回 ' ' 而不寻求输入?

在玩sys.stdin.read()(终端,Mac OS Sierra)时,发现它变得无法使用的奇怪行为。发生了什么?

# Python 2.7.13

import sys
sys.stdin.read()
# waits for input
# user presses ctrl-d (without any input)
# returns ''
sys.stdin.read()
# doesn't wait for input
# immediately returns ''

sys.stdin.read()
# ''
sys.stdin.read()
# ''
Run Code Online (Sandbox Code Playgroud)

注意:ctrl+ d= Mac上的EOF,Windows上的ctrl+z

更新:我注意到任何长度为 5 的字符串与一个新行的行为相同......较短/较长的字符串或更多/较少的新行行为正常......

# Python 2.7.13

import sys
sys.stdin.read()
12345
# press ctrl-d twice (only way to make single line string work?)
'12345'
# worked properly

sys.stdin.read()
1234
# user …
Run Code Online (Sandbox Code Playgroud)

python sys python-2.7

5
推荐指数
0
解决办法
1152
查看次数

Python 进程池执行器根据信号关闭

我使用主管来运行一些这样的脚本。因此,当主管停止或中断时,我尝试优雅地退出脚本。这是我当前的代码

import concurrent.futures
import random
import os
import signal
import sys

executor = concurrent.futures.ProcessPoolExecutor(max_workers=2)

some_flag = True

def some_func():
    while some_flag:
        executor.submit(print_some_num)

def print_some_num():
    print("From worker :{}".format(os.getpid()))
    print(random.randint(0,10))

def handler(arg1, arg2):
    print("Got interrupt")
    some_flag = False
    sys.exit("Run for ur life")
    #executor.shutdown(wait = False) ----> not working
    print("Shutdown")

signal.signal(signal.SIGTERM,handler)
signal.signal(signal.SIGINT,handler)

if __name__ == '__main__':
    some_func()
Run Code Online (Sandbox Code Playgroud)

这工作正常,现在当我读到 executor.shutdown(wait=True/False) 时我很困惑。所以我尝试了一下,但无法让执行程序关闭(它只是挂起)。请帮我解答这些问题

 1) what does executor.shutdown do that sys.exit() doesn't do.
 2) What is advisable in production environment? If executor shutdown is required, please help …
Run Code Online (Sandbox Code Playgroud)

python sys supervisord concurrent.futures

5
推荐指数
1
解决办法
6656
查看次数

为什么 QtWidgets.QApplication 需要 sys.argv?

大家好,我正在 youtube 上的一系列教程中学习 pyqt5,我不明白为什么QtWidgets.QApplication有这样的论点:sys.argv我不熟悉sys库,我阅读了文档,但仍然没有任何线索,所以抱歉,我知道这个问题有点菜鸟。

import sys
from PyQt5 import QtWidgets


def window():
    app = QtWidgets.QApplication(sys.argv)
    w=QtWidgets.QWidget()
    w.show()
    sys.exit(app.exec_())

window()
Run Code Online (Sandbox Code Playgroud)

sys python-3.x pyqt5

5
推荐指数
1
解决办法
4290
查看次数

Jupyter笔记本,错误的sys.path和sys.executable

我正在尝试在Jupyter笔记本中运行anaconda分发的python库,但是当我运行笔记本时,我一直得到ImportErrors,因为python路径被设置为Mac OS X 10.11的默认分发版

当我打印出sys.path和sys.executable时,它们在运行python vs运行jupyter notebook时有所不同.例如,

from pprint import pprint as p
import sys

p(sys.path)
Run Code Online (Sandbox Code Playgroud)

在python中执行此操作后,我得到了正确的输出:

['',
 '/Users/glennraskovich/anaconda2/lib/python27.zip',
 '/Users/glennraskovich/anaconda2/lib/python2.7',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-darwin',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-mac',
 '/Users/glennraskovich/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-tk',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-old',
 '/Users/glennraskovich/anaconda2/lib/python2.7/lib-dynload',
 '/Users/glennraskovich/anaconda2/lib/python2.7/site-packages',
 '/Users/glennraskovich/anaconda2/lib/python2.7/site-packages/aeosa']
Run Code Online (Sandbox Code Playgroud)

但是当在jupyter笔记本中运行时,我得到:

['', '/usr/local/lib/python2.7/site-packages/dask-0.11.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/networkx-1.11-py2.7.egg', '/usr/local/lib/python2.7/site-packages/six-1.10.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Pillow-3.3.1-py2.7-macosx-10.11-x86_64.egg', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/Library/Python/2.7/site-packages', '/usr/local/lib/python2.7/site-packages/IPython/extensions', '/Users/glennraskovich/.ipython']

对于sys.executable,

p(sys.executable)
Run Code Online (Sandbox Code Playgroud)

在python中,正确的输出:

/Users/glennraskovich/anaconda2/bin/python
Run Code Online (Sandbox Code Playgroud)

但在jupyter笔记本中,sys.executable未设置为anaconda版本

/usr/local/opt/python/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

我已经尝试在我的.bashrc和.bash_profile中设置PATH,并使用python,jupyter等显示anaconda路径但jupyter笔记本不使用anaconda路径的命令.这可能是什么问题?

python sys python-2.7 jupyter jupyter-notebook

5
推荐指数
1
解决办法
5288
查看次数

如何运行从子文件夹导入的 Python 3 脚本?

无论我尝试什么,自从我切换到 Python 3 后,我只能从项目的根文件夹运行导入的脚本,而不能从子文件夹导入。我知道这里有很多关于我收到的错误消息的问题,但建议的解决方案对我不起作用。有人可以为这个小示例项目提供示例解决方案吗?我相信它会受到很多人的赞赏。

\n\n
proj\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foofolder\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foofile.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subfolder\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 run.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

foofun()我在 中定义了该函数foofile.py,并想在 中调用它run.py

\n\n

如果run.py直接在proj里面就可以了。但是(只是为了让事情井井有条)我想将其放在子文件夹中 - 令人惊讶的是,这似乎是不可能的。

\n\n

烦人的是,我的 IDE (PyCharm) 中的自动完成功能表明from foofolder.foofile import foofun应该可以工作。但事实并非如此。我也无法想象任何其他进口:

\n\n

from foofolder.foofile import foofun-->ImportError: No module named 'foofolder'

\n\n

from .foofolder.foofile import foofun--> SystemError: Parent module '' not loaded, cannot perform relative import(与开头的两个点相同。)

\n\n

from proj.foofolder.foofile import foofun--> …

python-import sys

5
推荐指数
1
解决办法
3653
查看次数

从 sys.stdin 读取,以 RETURN 结束用户输入

我正在使用 Py 3.6 中的用户输入编写脚本。

在脚本中,用户被要求在 shell 中输入一个文本部分——可能包含新行。然后输入的文本将保存到 Python 变量中以供进一步处理。

由于用户输入可能包含换行符,我想我不能使用input()但正在使用sys.stdin.read()(如建议here)。

问题

读入输入工作正常,但要结束用户输入,用户必须按下 Return 键,然后使用组合键CTRL + d(请参阅此处)。(请参阅下面的当前程序

  • 我希望用户可以sys.stdin.read通过按回车键来结束他们的输入(参见下面的预期程序

编辑:对当前过程的任何其他简化CTRL + d也表示赞赏。

  • 这是可行的吗?

  • 这里有一些技巧但我想也许有更好的方法

当前代码

    # display text on screen
    print("Review this text\n" + text)
    # user will copy and paste relevant items from text displayed into Terminal
    user_input =  sys.stdin.read() 
    print ("hit ctrl + d to continue")
    # …
Run Code Online (Sandbox Code Playgroud)

python stdin user-input sys

5
推荐指数
1
解决办法
837
查看次数

将多个字符串参数传递给 Python 脚本

我有一个 python 脚本,需要传递多个参数。第一个参数可能有多个电子邮件,第二个参数是一个字符串,第三个参数也是一个字符串。

假设我有文件

    mytest.py:

    def tfunc(em, st1, st2):
      
           #### do blah blah blah

    def main ():

       eml = sys,argv[1].strip()
       st1v = sys,argv[2].strip()
       st2v = sys,argv[3].strip()

       dosom = tfunc(eml, st1v, st2v)

    if __name__ == '__main__':
      main()
Run Code Online (Sandbox Code Playgroud)

现在我测试在命令行上运行该函数的方法是:

        python mytest.py xx@yz.com  value of file 1  value of file 2
Run Code Online (Sandbox Code Playgroud)

所以参数实际上是 xx@yz.com (还需要知道如果我有多个电子邮件会发生什么),“文件 1 的值”和“文件 2 的值”

在我实际的最终代码中,两个参数都会有空格。然而,当我运行代码时,它正确地获取电子邮件(如果只有一个),但将第二个参数作为值(来自第一个参数)和(来自第一个参数)。但这不是我想要的。

我正在寻找 xx@yz.com 作为第一个参数,“文件 1 的值”作为第二个参数,“文件 2 的值”作为第三个参数。

我可以寻求帮助吗?提前致谢。

python arguments parameter-passing sys command-line-arguments

5
推荐指数
1
解决办法
2万
查看次数