好的,这是我的代码的一部分(我已经导入了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 很陌生,对这种编码的东西很困惑。到目前为止,我已经阅读了以下类型的“编码”:
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)
有什么不同?
我正在尝试使用带有多处理库的自定义 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 与多处理正常工作?
在玩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) 我使用主管来运行一些这样的脚本。因此,当主管停止或中断时,我尝试优雅地退出脚本。这是我当前的代码
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) 大家好,我正在 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) 我正在尝试在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 3 后,我只能从项目的根文件夹运行导入的脚本,而不能从子文件夹导入。我知道这里有很多关于我收到的错误消息的问题,但建议的解决方案对我不起作用。有人可以为这个小示例项目提供示例解决方案吗?我相信它会受到很多人的赞赏。
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\nRun Code Online (Sandbox Code Playgroud)\n\nfoofun()我在 中定义了该函数foofile.py,并想在 中调用它run.py。
如果run.py直接在proj里面就可以了。但是(只是为了让事情井井有条)我想将其放在子文件夹中 - 令人惊讶的是,这似乎是不可能的。
烦人的是,我的 IDE (PyCharm) 中的自动完成功能表明from foofolder.foofile import foofun应该可以工作。但事实并非如此。我也无法想象任何其他进口:
from foofolder.foofile import foofun-->ImportError: No module named 'foofolder'
from .foofolder.foofile import foofun--> SystemError: Parent module '' not loaded, cannot perform relative import(与开头的两个点相同。)
from proj.foofolder.foofile import foofun--> …
我正在使用 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 脚本,需要传递多个参数。第一个参数可能有多个电子邮件,第二个参数是一个字符串,第三个参数也是一个字符串。
假设我有文件
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
sys ×10
python ×8
python-2.7 ×2
python-3.x ×2
arguments ×1
codepages ×1
encoding ×1
jupyter ×1
locale ×1
pyqt5 ×1
stdin ×1
supervisord ×1
user-input ×1