我有使用perl编写脚本的经验,这使我可以通过使用反向标记来轻松执行linux命令.我想知道,我该怎么做这个Python?是否有一种特殊的方法来捕获命令(输出)的结果?
谢谢 :)
我有一个程序,其中帮助文档位于与.py模块相同的文件夹中的.pdf中.我需要该程序使用系统的默认PDF阅读器打开.pdf.
我在我的程序中使用此代码:
if sys.platform.startswith('darwin'):
os.system("SlannanHelp.pdf")
elif sys.platform.startswith('linux'):
os.system("SlannanHelp.pdf")
elif sys.platform.startswith('win32'):
os.filestart("SlannanHelp.pdf")
Run Code Online (Sandbox Code Playgroud)
但是,当在Windows 7中运行时,我收到以下错误:
回溯(最近通话最后一个):文件 "C:\用户\用户\ MousePaw游戏\ MousePaw实验室\ Slannan\Slannan.py",线1286,在help_event os.filestart( "SlannanHelp.pdf")AttributeError的: '模块'对象没有属性'filestart'
我的猜测是os.filestart可以在NT系统中运行,但不能在Windows 7中运行.是否有适用于Windows 7的命令,或者适用于Windows 7的命令?如果是后者,我如何检查用户是否正在运行NT或7版本的Windows?
提前致谢!
我有以下功能:
def getInput():
# define buffer (list of lines)
buffer = []
run = True
while run:
# loop through each line of user input, adding it to buffer
for line in sys.stdin.readlines():
if line == 'quit\n':
run = False
else:
buffer.append(line.replace('\n',''))
# return list of lines
return buffer
Run Code Online (Sandbox Code Playgroud)
在我的函数takeCommands()中调用,它被调用来实际运行我的程序.
但是,这没有任何作用.我希望将每一行添加到一个数组中,一旦一行=='退出',它就会停止用户输入.我都试过for line in sys.stdin.readlines()和for line sys.stdin,但他们都没有注册任何我输入的(我运行它在Windows命令提示符).有任何想法吗?谢谢
我试图将"sys.argv [1]"传递给一个函数.
#!/usr/bin/env/ python
import sys
def main():
test(sys.argv[1])
def test(sys.argv[1]):
print "Hello " + sys.argv[1]
./arg.py World
File "./arg.py", line 5
def test(sys.argv[1]):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
在将Interwebs分散几个小时后,不确定从哪里开始.我也尝试将"sys.argv [1]"设置为一个变量并尝试将其传递给函数但仍然无效.
我正在尝试编写一个涉及使用硬币翻转、正面或反面的程序,但它会打印“正面”然后被“反面”替换并继续这样做直到它决定答案。
目前,当我运行程序时,它每次都会在下一行打印“头”或“尾”。这发生在空闲和终端上。
我试过使用回车 (\r)、退格 (\b) 和 sys.stdout.write() 和 .flush() 但都没有工作,它只是在下一行继续打印。
有没有其他方法可以擦除已打印的内容,或者我可以使用其他软件吗?这是我的代码:
import time
import random
offset = random.randint(0,1)
for i in range (0, 20+offset):
if i % 2 == 0:
print("Heads")
else:
print("Tails")
print("\r")
time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud) 我试图运行以下简单的代码
import sys
print("Starting Test Python Module");
def testmethod():
print("From test method")
sys.exitfunc = testmethod
print("Terminating Test Python Module");
Run Code Online (Sandbox Code Playgroud)
它打印出来
C:\Users\athakur\Softwares>python test.py
Starting Test Python Module
Terminating Test Python Module
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么它不打印"从测试方法"
使用atexit可以正常工作
import atexit
print("Starting Test Python Module");
def testmethod():
print("From test method")
atexit.register(testmethod)
print("Terminating Test Python Module");
Run Code Online (Sandbox Code Playgroud)
输出
C:\Users\athakur\Softwares>python test.py
Starting Test Python Module
Terminating Test Python Module
From test method
Run Code Online (Sandbox Code Playgroud) 我传递"sys.stdout"作为进程的参数,然后进程在执行其内容时写入"sys.stdout".
import multiprocessing
import sys
def worker_with(stream):
stream.write('In the process\n')
if __name__ == '__main__':
sys.stdout.write('In the main\n')
lock = multiprocessing.Lock()
w = multiprocessing.Process(target=worker_with, args=(sys.stdout,))
w.start()
w.join()
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,它返回以下错误:"ValueError:关闭文件上的操作".
我尝试运行相同的代码,但直接调用该函数而不是生成一个进程,它工作,它打印到控制台.我也尝试运行相同的代码,但直接在函数内部调用sys.stdout,将其作为一个进程生成它并且它可以工作.问题似乎是将sys.stout作为进程的参数传递.
有人知道为什么吗?
注意:此代码的灵感来自教程PYMOTW - 进程之间的通信.
编辑:我在Windows7上运行Python 2.7.10,32位.
我想记录使用argparse模块的python程序的用法.目前,该记录器记录类似于给出的答案在命令行中使用这个职位.但是,这仅提供命令行参数,并且不包括稍后在argparse中设置的默认值(毕竟这是预期用途).有没有一种简单的方法来打印所有argparse选项来创建一个usage包含默认值的漂亮,整洁的日志条目?
进入argparse命名空间以按名称获取每个参数并不困难,但我希望有人能够以简洁的方式提取所需的信息.
任何方向表示赞赏!
跟进此问题,LogBack Syslog无法正常工作
我使用下面的命令syslog在ubuntu16.04中查看,但得到以下结果。这是正确的观看方式吗?
user@xxx:~$ tail -f /var/log/syslog Jun 6 23:08:50 xxx systemd[1]:
Starting Hostname Service... Jun 6 23:08:50 xxx dbus[889]: [system]
Successfully activated service 'org.freedesktop.hostname1' Jun 6
23:08:50 xxx systemd[1]: Started Hostname Service. Jun 6 23:09:41 xxx
gnome-session[2645]: (nautilus:2860): Gtk-WARNING **: Attempting to
read the recently used resources file at
'/home/xxx/.local/share/recently-used.xbel', but the parser failed:
Failed to open file '/home/xxx/.local/share/recently-used.xbel':
Permission denied. Jun 6 23:09:41 xxx org.gtk.vfs.Daemon[2508]:
(gvfsd-recent:15282): Gtk-WARNING **: Attempting to read the recently …Run Code Online (Sandbox Code Playgroud)